home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / banging_the_metal / qdos / qdos4amiga2 / romsrc / sys / qdos4_asm < prev    next >
Text File  |  2000-01-03  |  49KB  |  2,379 lines

  1. */beginfile QDOS4_asm
  2. ; --------------------------------------------------------------
  3. ; QDOS4_asm - The QDOS kernel
  4. ;       - last modified 27/11/96
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;    ...latest changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8.  
  9. ; --------------------------------------------------------------
  10. ; microdrive routines to switch on & off motor and read & write
  11. ; sectors used to reside here, various 8049 routines also.
  12. ; also patch out polled task for keyboard reading (PLIST)
  13. ; and schedular task for serial I/O (SHLST1)
  14.  
  15. L029FC:
  16.  
  17. ; --------------------------------------------------------------
  18. ;*/beginoverlay
  19. FS_FIX:
  20.     MOVEA.L    4(A4),A4     ; get address after link
  21.  
  22.     CMPI.B    #$46,D0        ; FS.HEADS
  23.     BEQ.S    FS_FIX1
  24.  
  25.     CMPI.B    #$49,D0        ; FS.SAVE
  26.     BNE.S    FS_FIX2
  27.  
  28. FS_FIX1:
  29.     BSR.S    CLRALL
  30.  
  31. FS_FIX2:
  32.     JSR    (A4)        ; call I/O device driver to
  33.                 ; execute TRAP #3 with D0
  34.     CMPI.B    #$47,$13(A0)    ; FS.HEADR
  35.     BEQ.S    FS_FIX3
  36.  
  37.     CMPI.B    #$48,$13(A0)    ; FS.LOAD
  38.     BNE.S    MSG_FIX1
  39.  
  40. FS_FIX3:
  41.     BRA    CLRALL
  42.  
  43. MSG_FIX:
  44.     movem.l    d0-d2/a0,-(a7)
  45.     moveq    #0,d0
  46.     trap    #1
  47.     move.l    $14A(a0),a2
  48.     move.w    0(a2,d5.w),d5
  49.     lea    0(a2,d5.w),a2
  50.     movem.l    (a7)+,d0-d2/a0
  51.  
  52. MSG_FIX1:
  53.     rts
  54.  
  55. ;*/endoverlay
  56. ; --------------------------------------------------------------
  57.  
  58. ; --------------------------------------------------------------
  59. ;*/beginoverlay
  60. ;*/beginfilling
  61. NOP02FAE:
  62.     DCB.w    ($2FAE-(NOP02FAE-ORGN))/2,$4E71
  63. L02FAE:
  64. ;*/endfilling
  65. ;*/endoverlay
  66. ; --------------------------------------------------------------
  67. ; allocate common heap
  68. MM_ALCHP:
  69.     LEA    $08(A6),A0    ;SV.CHPFR First free space
  70.                 ; in common heap area
  71.     MOVEQ    #$0F,D2
  72.     JSR    L03106(PC)    ;*/undomodify BSR L03106
  73.                 ; allocate area in heap
  74.                 ; (D1 bytes)
  75.     BLT.S    L02FD6
  76.     LEA    $4(A6),A2    ;SV.CHEAP Base of common
  77.                 ; heap area
  78.     CMPA.L    A1,A2
  79.     BEQ.S    L02FC6
  80.     CLR.L    $0008(A1)
  81. L02FC6:
  82.     MOVE.L    D1,D0
  83.     ADDQ.W    #4,A0        ;*/undomend ADDQ.L #4,A0
  84.     SUBQ.L    #4,D0
  85. ; --------------------------------------------------------------
  86. ;*/beginundoinsert
  87. ;    BCLR    #2,$28002    ; This flag bit has  been
  88.                 ; added to provide
  89. ;    BNE.S    L0HILF        ; memory allocation without
  90.                 ; destroying data
  91. ;*/endundoinsert
  92. ; --------------------------------------------------------------
  93. L02FCC:
  94.     CLR.L    (A0)+
  95.     SUBQ.L    #4,D0
  96.     BGT.S    L02FCC
  97.     SUBA.L    D1,A0        ; A0= base of reserved space
  98.     BRA.S    L02FF8
  99. ; --------------------------------------------------------------
  100. ;*/beginundoinsert
  101. L0HILF:
  102. ;    CLR.L    (A0)+
  103. ;    CLR.L    (A0)+
  104. ;    SUBQ.L    #8,D0
  105. ;    ADD.L    D0,A0
  106. ;    SUBA.L    D1,A0
  107. ;    MOVEQ    #0,D0
  108. ;    BRA.S    L02FF8
  109. ;*/endundoinsert
  110. ; --------------------------------------------------------------
  111. ; allocate memory in transient program area
  112. L02FD6:
  113.     MOVE.L    D1,-(A7)
  114.     ADDA.L    (A0),A1
  115.     CMPA.L    $0C(A6),A1    ;SV.FREE    Base of free
  116.                 ; area
  117.     BNE.S    L02FE2
  118.     SUB.L    (A0),D1
  119. L02FE2    JSR    L0324E(PC)    ;*/undomodify BSR L0324E
  120.     BNE.S    L02FF6
  121.     SUBA.L    D1,A0
  122.     LEA    $8(A6),A1    ;SV.CHPFR   First free space
  123.                 ; in common heap area
  124.     JSR    L0315E(PC)    ;*/undomodify BSR L0315E
  125.     MOVE.L    (A7)+,D1
  126.     BRA.S    MM_ALCHP
  127. L02FF6    ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  128. L02FF8    RTS
  129. RESERVD1 ; reserve D1 bytes in transient programm area
  130.     LEA    $18(A6),A0    ;SV.TRNFR First free space
  131.                 ; in Trans. Prog. Area
  132.     MOVEQ    #$0F,D2
  133.     MOVEQ    #1,D0
  134.     JSR    L03134(PC)    ;*/undomodify BSR L03134
  135.     TST.L    D2
  136.     BGT.S    L03032
  137.     MOVE.L    D1,-(A7)
  138.     LEA    $14(A6),A1    ; base of transient program
  139.                 ; area
  140.     ADDA.L    4(A1),A1
  141.     CMPA.L    $14(A6),A1    ; base of transient program
  142.                 ; area
  143.     BNE.S    L0301C
  144.     SUB.L    (A1),D1
  145. L0301C    JSR    L031B8(PC)    ;*/undomodify BSR L031B8
  146.                 ; allocate memory
  147.     BNE.S    L0305A
  148.     SUB.L    D1,$14(A6)    ; base of transient program
  149.                 ; area
  150.     LEA    $18(A6),A1    ; first free space in
  151.                 ; transient program area
  152.     JSR    L0315E(PC)    ;*/undomodify BSR L0315E
  153.     MOVE.L    (A7)+,D1
  154.     BRA.S    RESERVD1
  155. L03032    MOVEA.L    A2,A0
  156.     ADDA.L    4(A2),A0
  157.     MOVE.L    (A0),D3
  158.     CMP.L    D1,D3
  159.     BGT.S    L0304E
  160.     MOVE.L    4(A0),D3
  161.     BEQ.S    L03048
  162.     ADD.L    A0,D3
  163.     SUB.L    A2,D3
  164. L03048    MOVE.L    D3,$0004(A2)
  165.     BRA.S    L03056
  166. L0304E    SUB.L    D1,D3
  167.     MOVE.L    D3,(A0)
  168.     ADDA.L    D3,A0
  169.     MOVE.L    D1,(A0)
  170. L03056    MOVEQ    #0,D0
  171.     RTS
  172. L0305A    ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  173.     RTS
  174. MM_RECHP:
  175.     MOVE.L    (A0),D1
  176.     LEA    8(A6),A1     ; first free space in common
  177.                 ; heap aerea
  178.     JSR    L0315E(PC)    ;*/undomodify BSR L0315E
  179.     MOVE.L    (A1),D2
  180.     ADDA.L    D2,A1
  181.     CMPA.L    $0C(A6),A1    ;SV.FREE    Base of free
  182.                 ; area
  183.     BNE.S    L03088
  184.     MOVE.L    D2,D1
  185.     JSR    L03282(PC)    ;*/undomodify BSR L03282
  186.     SUB.L    D1,D2
  187.     BEQ.S    L03084
  188.     ADDA.L    $0004(A2),A2
  189.     MOVE.L    D2,(A2)
  190.     BRA.S    L03088
  191. L03084    CLR.L    4(A2)
  192. L03088    MOVEQ    #0,D0
  193.     RTS
  194. RELE_MEM ; release memory
  195.     MOVE.L    (A0),D1
  196.     LEA    $18(A6),A1    ; first free space in
  197.                 ; transient prog. area
  198.     JSR    L0315E(PC)    ;*/undomodify BSR L0315E
  199.     LEA    $14(A6),A2    ; base of transient program
  200.                 ; area
  201.     ADDA.L    4(A2),A2
  202.     CMPA.L    $14(A6),A2    ;SV.TRNSP   Base of
  203.                 ; transient program area
  204.     BNE.S    L030DE
  205.     MOVE.L    4(A2),-(A7)
  206.     MOVE.L    (A2),D2
  207.     MOVE.L    D2,D1
  208.     JSR    L031C8(PC)    ;*/undomodify BSR L031C8
  209.                 ; release memory
  210.     ADD.L    D1,$14(A6)    ;SV.TRNSP   Base of
  211.                 ; transient program area
  212.     SUB.L    D1,D2
  213.     BEQ.S    L030D2
  214.     MOVEA.L    (A7)+,A1
  215.     ADDA.L    D1,A2
  216.     ADD.L    D1,$18(A6)    ;SV.TRNFR   First free space
  217.                 ; in TPA
  218.     MOVE.L    D2,(A2)
  219.     CLR.L    8(A2)
  220.     MOVE.L    A1,$0004(A2)
  221.     BEQ.S    L030DE
  222.     SUB.L    D1,4(A2)
  223.     BRA.S    L030DE
  224. L030D2    MOVE.L    (A7)+,D2
  225.     BEQ.S    L030DA
  226.     ADD.L    $18(A6),D2    ;SV.TRNFR   First free space
  227.                 ; in TPA
  228. L030DA    MOVE.L    D2,$18(A6)    ;SV.TRNFR   First free space
  229.                 ; in TPA
  230. L030DE    RTS
  231. MT_FREE:
  232.     MOVEQ    #1,D0
  233.     MOVEQ    #0,D1
  234.     LEA    $18(A6),A0    ; first free space in
  235.                 ; transient prog. area
  236.     JSR    L03134(PC)    ;*/undomodify BSR.S L03134
  237.                 ;*/undomodify nop
  238.     MOVEA.L    $10(A6),A0    ; base of basic stack
  239.     SUBA.W    #$200,A0     ;*/undomend SUBA.L #$200,A0
  240.     SUBA.L    $C(A6),A0    ; base of free area
  241.     MOVE.L    A0,D1
  242.     CMP.L    D1,D2
  243.     BLE.S    L03100
  244.     MOVE.L    D2,D1
  245. L03100    BRA    RET_CLD0
  246. MM_ALLOC ; allocate D1 bytes in A0
  247.     MOVEQ    #7,D2
  248. L03106    MOVEQ    #0,D0
  249.     JSR    L03134(PC)    ;*/undomodify BSR.S L03134
  250.                 ;*/undomodify nop
  251.     CMP.L    D1,D2
  252.     BEQ.S    L03122
  253.     BGT.S    L03116
  254.     MOVEQ    #-3,D0        ;out of memory
  255.     RTS
  256. L03116    ADD.L    D1,4(A1)
  257.     MOVEA.L    A0,A1
  258.     ADDA.L    D1,A1
  259.     SUB.L    D1,D3
  260.     MOVE.L    D3,(A1)
  261. L03122    MOVE.L    $0004(A0),D2
  262.     BEQ.S    L0312C
  263.     ADD.L    A0,D2
  264.     SUB.L    A1,D2
  265. L0312C    MOVE.L    D2,$0004(A1)
  266.     MOVE.L    D1,(A0)
  267.     RTS
  268. L03134    ; general memory allocation
  269.     SUBQ.W    #4,A0        ;*/undomend SUBQ.L #4,A0
  270.     ADD.L    D2,D1
  271.     NOT.B    D2
  272.     AND.B    D2,D1
  273.     MOVEQ    #0,D2
  274.     MOVEA.L    D2,A2
  275. L03140    MOVEA.L    A0,A1
  276.     MOVE.L    4(A0),D3
  277.     BEQ.S    L0315C
  278.     ADDA.L    D3,A0
  279.     MOVE.L    (A0),D3
  280.     CMP.L    D1,D3
  281.     BLT.S    L03140
  282.     MOVEA.L    A1,A2
  283.     CMP.L    D2,D3
  284.     BLE.S    L03158
  285.     MOVE.L    D3,D2
  286. L03158    TST.B    D0
  287.     BNE.S    L03140
  288. L0315C    RTS
  289. ; link free space to task
  290. L0315E    CLR.L    8(A0)
  291. MM_LNKFR:
  292.     SUBQ.W    #4,A1        ;*/undomend SUBQ.L #4,A1
  293.     SUBA.L    A2,A2
  294. L03166    MOVEA.L    A2,A3
  295.     MOVEA.L    A1,A2
  296.     MOVE.L    $0004(A1),D2
  297.     BEQ.S    L0317A
  298.     ADDA.L    D2,A1
  299.     CMPA.L    A0,A1
  300.     BLE.S    L03166
  301.     SUBA.L    A0,A1
  302.     BRA.S    L0317C
  303. L0317A    MOVEA.L    D2,A1
  304. L0317C    MOVE.L    A0,D2
  305.     SUB.L    A2,D2
  306.     MOVE.L    D2,$0004(A2)
  307.     MOVE.L    D1,(A0)+
  308.     MOVE.L    A1,(A0)
  309. L03188    MOVEA.L    A2,A1
  310.     MOVEA.L    A3,A2
  311. L0318C    MOVE.L    4(A1),D2
  312.  
  313.     ifd    DoCache
  314. ; --------------------------------------------------------------
  315. ;*/beginoverlay
  316.     beq.s    L0315C        ;*/modify BEQ.S  L031B6
  317.     endif
  318.     ifnd    DoCache
  319.     BEQ.S    L031B6
  320.     endif
  321.  
  322.     MOVEA.L    A2,A3
  323.     MOVEA.L    A1,A2
  324.     ADDA.L    D2,A1
  325.     MOVE.L    A3,D2
  326.     BEQ.S    L0318C
  327.     MOVE.L    (A2),D2
  328.     ADD.L    A2,D2
  329.     CMP.L    A1,D2
  330.     BNE.S    L0318C
  331.     MOVE.L    4(A1),D2
  332.     BEQ.S    L031AC
  333.     ADD.L    (A2),D2
  334. L031AC    MOVE.L    D2,4(A2)
  335.     MOVE.L    (A1),D2
  336.     ADD.L    D2,(A2)
  337.     BRA.S    L03188
  338.  
  339.     ifd    DoCache
  340.                 ;*/removecode L031B6   RTS
  341.     endif
  342.     ifnd    DoCache
  343. L031B6    RTS
  344.     endif
  345.  
  346. L031B8    ; test against memory base, used to allocate memory
  347.     JSR    L0323A(PC)    ;*/undomodify BSR  L0323A
  348.  
  349.     ifd    DoCache
  350.     bne.s    L0315C        ;*/modify BNE.S  L031DE
  351.     endif
  352.     ifnd    DoCache
  353.     BNE.S    L031DE
  354.     endif
  355.  
  356.     BSR.S    L031E0
  357. L031C0    MOVE.L    (A1)+,(A0)+
  358.     SUBQ.L    #4,D0
  359.     BNE.S    L031C0
  360.     BRA.S    L031DE
  361. L031C8    ; test against top of memory, used to release memory
  362.     JSR    L03276(PC)    ;*/undomodify BSR L03276
  363.     NEG.L    D1
  364.  
  365.     ifd    DoCache
  366.     beq.s    L0315C        ;*/modify BEQ.S L031DE
  367.     endif
  368.     ifnd    DoCache
  369.     BEQ.S    L031DE
  370.     endif
  371.  
  372.     BSR.S    L031E0
  373.     NEG.L    D1
  374.     ADDA.L    D0,A0
  375.     ADDA.L    D0,A1
  376. L031D8    MOVE.L    -(A1),-(A0)
  377.     SUBQ.L    #4,D0
  378.     BNE.S    L031D8
  379.  
  380.     ifd    DoCache
  381. L031DE:
  382.     bra    CLRALL        ;*/modify L031DE     RTS
  383. ;*/endoverlay
  384. ; --------------------------------------------------------------
  385.     endif
  386.     ifnd    DoCache
  387. L031DE    RTS
  388.     endif
  389.  
  390. ; update A6 and A7 for Basic
  391. L031E0:
  392.     MOVEA.L    $68(A6),A3    ; SV.JBBAS Pointer to base
  393.                 ; of job table
  394.     MOVE.L    A0,(A3)
  395.     ADDA.L    D1,A0
  396.     SUB.L    D1,$58(A0)
  397.     SUB.L    D1,$5C(A0)
  398.     MOVEA.L    A0,A1
  399.     SUBA.L    D1,A0
  400.     MOVE.L    $14(A6),D0    ; SV.TRNSP Base of
  401.                 ; transient program area
  402.     SUB.L    A1,D0
  403.     CMPA.L    $64(A6),A3    ; SV.JBPNT Pointer to
  404.                 ; current job table entry
  405.     BNE.S    L0320A
  406.     SUB.L    D1,8(A5)
  407.     MOVE.L    USP,A3
  408.     SUBA.L    D1,A3
  409.     MOVE.L    A3,USP
  410. L0320A    RTS
  411. L0320C    ADDI.L    #$1FF,D1     ; 512 bytes round
  412. L03212    ANDI.W    #$FE00,D1    ;*/undomend ANDI.L#$FFFFFE00
  413.                 ;*/note high word unaltered
  414.     RTS
  415. ; calculate new position of server block
  416. L03218:
  417.     MOVEA.L    $10(A6),A0    ;SV.BASIC Base o BASIC stack
  418.     MOVEQ    #-8,D3
  419.     BRA.S    L03226
  420. L03220:
  421.     MOVEA.L    $0C(A6),A0    ;SV.FREE Base of free area
  422.     MOVEQ    #8,D3
  423. L03226:
  424.     MOVE.L    A0,D0
  425.     SUB.L    A6,D0
  426.     LSR.L    #6,D0        ; number of 512 byte  blocks
  427.     MOVEA.L    $58(A6),A1    ; SV.BTBAS Pointer to base
  428.                 ; of slave block table
  429.     ADDA.L    D0,A1        ;*/mend ADDA.W D0,A1
  430.     MOVE.L    D1,D0
  431.     LSR.L    #6,D0        ; /512
  432.     LSR.L    #3,D0
  433.     RTS
  434. ; Expand BASIC area and update server block
  435. L0323A:
  436.     BSR.S    L0320C
  437.     BSR.S    L03218
  438.     SUBA.L    D1,A0
  439. ; do we intrude beyond SV.FREE - base of free area?
  440.     CMPA.L    $0C(A6),A0    ;*/undomodify
  441.                 ; LEA -$200(A0),A2
  442.                 ; CMPA.L $0C(A6),A2
  443.                 ;*/note would be safer
  444.     ble.s    L0329E
  445.     MOVE.L    A0,$10(A6)    ;SV.BASIC Base o BASIC stack
  446.     ADDA.L    D3,A1
  447.     bra.s    L03270
  448. ; Expand HEAP space and update server block
  449. L0324E:
  450.     BSR.S    L0320C
  451.     BSR.S    L03220
  452.     ADDA.L    D1,A0
  453. ; do we intrude beyond SV.BASIC - base of BASIC stack?
  454.     CMPA.L    $10(A6),A0    ;*/undomodify
  455.                 ; LEA $200(A0),A2
  456.                 ; CMPA.L $10(A6),A2
  457.                 ;*/note would be safer
  458.     bge.s    L0329E
  459.     MOVE.L    A0,$0C(A6)    ; SV.FREE Base of free area
  460.     bra.s    L03270
  461. L03260:
  462. ;?    CMP.L   $58(A6),A1 ; below base of slaveblock table ?
  463. ;?    BLT     L0329A
  464. ;?    CMP.L   $5C(A6),A1 ; behind top of slaveblock table ?
  465. ;?    BGE     L0329A
  466.     MOVEQ    #$0C,D2
  467.     AND.B    (A1),D2
  468.     BEQ.S    L0326C
  469.     JSR    L0352A(PC)    ;*/undomodify BSR L0352A
  470.                 ; forced slaving ?
  471.     BRA.S    L03260
  472. L0326C:
  473.     CLR.B    (A1)        ; mark server block as
  474.                 ; unavailable
  475.     ADDA.W    D3,A1        ;*/undomend ADDA.L D3,A1
  476. L03270:
  477.     DBF    D0,L03260
  478.     bra.s    L0329A
  479. L03276:
  480.     BSR.S    L03212
  481.     BSR.S    L03218
  482.     ADD.L    D1,A0
  483.     MOVE.L    A0,$10(A6)    ;SV.BASIC Base of BASIC
  484.                 ; stack
  485.     bra.s    L03296
  486. ; reclaim slave blocks
  487. L03282:
  488.     BSR.S    L03212
  489.     BSR.S    L03220
  490.     SUBA.L    D1,A0
  491.     MOVE.L    A0,$0C(A6)    ;SV.FREE Base of free area
  492.     SUBA.W    D3,A1        ;*/undomend SUBA.L D3,A1
  493.     BRA.S    L03296
  494. L03290:
  495.     MOVE.B    #1,(A1)
  496.     SUBA.W    D3,A1        ;*/undomend SUBA.L D3,A1
  497. L03296:
  498.     DBF    D0,L03290
  499. L0329A:
  500.     MOVEQ    #0,D0
  501.     BRA.S    L032A0
  502. L0329E:
  503.     MOVEQ    #-3,D0        ; out of memory error
  504. L032A0:
  505.     RTS
  506. ; ***********************************************************
  507. ; * TRAP #2 , I/O open, close, format calls              *
  508. ; ***********************************************************
  509. DO_TRAP2 ; supervisor of TRAP 2
  510.     MOVEA.L    $64(A6),A1    ;SV.JBPNT   Pointer to
  511.                 ; current job table entry
  512.     MOVEA.L    (A1),A1        ; base of job table
  513.     BCLR    #7,$16(A1)    ; Relative addressing (TRAP
  514.                 ; #4 ?)
  515.     BEQ.S    L032B4
  516.     ADDA.L    8(A5),A0     ; add A6 of Basic to A0 (A5
  517.                 ; points to saved regs)
  518. L032B4    SUBQ.B    #1,D0
  519.     BEQ.S    IO_OPEN
  520.     SUBQ.B    #1,D0
  521.     BEQ    IO_CLOSE
  522.     SUBQ.W    #1,D0
  523.     BEQ    IO_FORMT
  524.     SUBQ.W    #1,D0
  525.     BEQ    IO_DELET
  526.     MOVEQ    #-15,D0        ; Bad parameter error
  527.     BRA    RET_TRAP
  528. L032D0:
  529. IO_OPEN:
  530. ; --------------------------------------------------------------
  531. */beginundoinsert
  532. ; The code that had been inserted here was to provide a
  533. ; searchlist for all OPEN_IN (old file) calls.
  534. ; The routine first tried the supplied name, and if the file
  535. ; was not found, it then tried the following paths:
  536. ; RAM1_ ,RAM2_ , FLP1_ , FLP2_ , JAN1_
  537. */endundoinsert
  538. ; --------------------------------------------------------------
  539.     MOVEM.L    A1-A4,-(A7)    ;*/undomend MOVEM.L D7/A1-A4,-(A7)
  540.     MOVEA.L    A0,A1
  541.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  542.                 ; Base address of job -> A0
  543.     EXG    A0,A1        ; channel ID -> A0 / Job
  544.                 ; address -> A1
  545.     MOVEA.L    $78(A6),A3    ;SV.CHBAS   Pointer to base
  546.                 ; of channel table
  547. L032E0    TST.B    (A3)
  548.     BLT.S    L032F0
  549.     ADDQ.W    #4,A3        ;*/undomend ADDQ.L #4,A3
  550.     CMPA.L    $7C(A6),A3    ;SV.CHTOP Pointer to top of
  551.                 ; channel table
  552.     BLT.S    L032E0
  553.     MOVEQ    #-6,D0        ; channel not found error
  554.     BRA.S    L0334C        ; return
  555. L032F0    MOVEA.L    $44(A6),A2    ;SV.DRLST Pointer to list of
  556.                 ; device drivers
  557. L032F4    MOVEM.L    D1-D7/A1-A6,-(A7)
  558.     LEA    -$18(A2),A3
  559.     MOVEA.L    8(A2),A4
  560.     JSR    (A4)
  561.     MOVEM.L    (A7)+,D1-D7/A1-A6
  562.     TST.L    D0
  563.     BEQ.S    L0331E
  564.     CMPI.W    #-7,D0        ; not found error
  565.     BNE.S    L0334C        ; return if not -7
  566.     MOVEA.L    (A2),A2        ; try next device driver
  567.     MOVE.L    A2,D0
  568.     BGT.S    L032F4        ; continue
  569.     JSR    L0355A(PC)    ;*/undomodify BSR L0355A
  570.                 ; now check Directory device
  571.                 ; drivers
  572.     TST.L    D0
  573.     BNE.S    L0334C        ; return with this result
  574. L0331E    ; channel opened without error
  575.     MOVE.L    A0,(A3)
  576.     MOVE.W    $70(A6),D2    ;SV.CHTAG   Current value of
  577.                 ; channel tag
  578.     ADDQ.W    #1,$70(A6)    ; increment channel tag
  579.     ADDQ.W    #4,A0        ;*/undomend ADDQ.L #4,A0
  580.     MOVE.L    A2,(A0)+     ; store address of driver
  581.     MOVE.L    D1,(A0)+     ; owner job
  582.     MOVE.L    A3,(A0)+     ; address to be sent when
  583.                 ; space released
  584.     MOVE.W    D2,(A0)+     ; store channel Tag= channel
  585.                 ; ID
  586.     CLR.W    (A0)+        ; clear status (OK) and
  587.                 ; action for waiting job
  588.     CLR.L    (A0)+        ; job waiting on IO
  589.     SWAP    D2
  590.     SUBA.L    $78(A6),A3    ;SV.CHBAS Pointer to base of
  591.                 ; channel table
  592.     MOVE.W    A3,D2
  593.     LSR.W    #2,D2
  594.     MOVEA.L    D2,A0
  595.     CMP.W    $72(A6),D2    ;SV.CHMAX Highest current
  596.                 ; channel number
  597.     BLS.S    L0334C
  598.     MOVE.W    D2,$72(A6)    ; update Highest current
  599.                 ; channel number
  600. L0334C    MOVEM.L    (A7)+,A1-A4    ;*/undomend MOVEM.L (A7)+,D7/A1-A4
  601.     BRA.S    L03378        ;*/undomodify RTS
  602. IO_CLOSE:
  603.     MOVE.L    A0,D7        ; Store channel ID
  604.     JSR    L03476(PC)    ;*/undomodify BSR L03476
  605.                 ; verify channel ID and get
  606.                 ; linkage block of ID
  607.     MOVEM.L    D1-D7/A1-A6,-(A7)
  608.     MOVEA.L    4(A0),A4     ; Address of driver for
  609.                 ; channel
  610.     LEA    -$18(A4),A3    ; get start of linkage block
  611.                 ; (including all)
  612.     MOVEA.L    $C(A4),A4    ; close routine of driver
  613.     JSR    (A4)        ; call close routine of
  614.                 ; driver
  615.     MOVEM.L    (A7)+,D1-D7/A1-A6
  616.     LSL.W    #2,D7        ; stored channel ID*4
  617.     MOVEA.L    $78(A6),A0    ;SV.CHBAS   Pointer to base
  618.                 ; of channel table
  619.     ADDA.W    D7,A0        ; get address of channel def
  620.                 ; block pointer
  621.     ST    (A0)        ; set flag for closed
  622.                 ; channel
  623. L03378    BRA    RET_TRAP
  624. ; --------------------------------------------------------------
  625. ;  TRAP #3 handling
  626. ; --------------------------------------------------------------
  627. ;*/beginoverlay
  628.     ifd    NoTas
  629. L0337C:
  630. DO_TRAP3:
  631.     MOVE.L    A0,D7
  632.     BSR    L03476        ;*/modify JSR $3476(PC)
  633.                 ; verify channel ID and get
  634.                 ; linkage block for ID
  635.     BSET    #7,$12(A0)    ;*/mend TAS $12(A0)
  636.                 ;*/note won't work on AMIGA
  637.     BNE    o03414
  638.     MOVEM.L    D2-D7/A2-A6,-(A7)
  639.     CLR.L    -(A7)
  640.     ANDI.L    #$7F,D0
  641.     CMPI.B    #$49,D0        ; highest possible routine
  642.                 ; number
  643.     BGT.S    o033B0
  644.     CMPI.B    #$46,D0        ; FS.HEADS / FS.HEADR /
  645.                 ; FS.LOAD / FS.SAVE
  646.     BGE.S    o033AE
  647.     CMPI.B    #$07,D0        ; separate SD.xx (screen
  648.                 ; output) calls
  649.     BGT.S    o033B0
  650.     BTST    #1,D0
  651.     BEQ.S    o033B0
  652. o033AE:
  653.     MOVEQ    #0,D1
  654. o033B0:
  655.     MOVEA.L    $64(A6),A3    ; pointer to current
  656.                 ; jobtable entry
  657.     MOVEA.L    (A3),A3        ; get job control block
  658.     BCLR    #7,$16(A3)    ; relative addressing flag
  659.     BEQ.S    o033C4
  660.     MOVE.L    8(A5),(A7)
  661.     ADDA.L    (A7),A1
  662. o033C4:
  663.     MOVEA.L    4(A0),A4     ; address of I/O driver
  664.     MOVE.B    D0,$13(A0)    ;store action for waiting
  665.                 ; job as D0 at call time
  666.     MOVEQ    #0,D3
  667.     LEA    -$18(A4),A3
  668. ;     MOVEA.L  4(A4),A4     ; get address after link
  669. ;     JSR     (A4)         ; call I/O device driver to
  670.                 ; execute TRAP #3 with D0
  671.     bsr    FS_FIX        ;*/mend
  672.     nop
  673.  
  674.     SUBA.L    (A7),A1
  675.     CMPI.W    #-1,D0        ; error ?
  676.     BNE.S    o03422
  677.     MOVE.W    $A(A7),D3
  678.     BEQ.S    o03422
  679.     MOVEA.L    $2C(A7),A6
  680.     BSR    JOBID_ME
  681.     MOVE.L    D0,$14(A0)    ; job status
  682.     LEA    $12(A0),A0    ; jobs accumulated priority
  683.     TST.L    (A7)+
  684.     BNE.S    o033FC
  685.     ST    (A0)
  686. o033FC:
  687.     MOVE.L    A0,$C(A3)
  688.     MOVE.W    D3,$14(A3)
  689.     SF    $12(A3)
  690.     MOVEQ    #-1,D0
  691.     MOVEM.L    (A7)+,D2-D7/A2-A6
  692. o0340E:
  693.     MOVEA.L    D7,A0
  694.     BRA    L00936
  695. o03414:
  696.     TST.W    D3
  697.     BEQ.S    o0341E
  698.     SUBQ.L    #2,$000E(A7)
  699.     BRA.S    o0340E
  700. o0341E:
  701.     MOVEQ    #-$01,D0
  702.     BRA.S    o0342C
  703. o03422:
  704.     ADDQ.L    #4,A7
  705.     MOVEM.L    (A7)+,D2-D7/A2-A6
  706.     SF    $12(A0)        ; jobs accumulated priority
  707. o0342C:
  708.     MOVEA.L    D7,A0
  709.     BRA.S    L0347C        ;*/modify BRA RET_TRAP
  710.                 ;*/note to save space only
  711. ; --------------------------------------------------------------
  712. ;  TRAP #4
  713. ; --------------------------------------------------------------
  714. L03432:
  715. DO_TRAP4:
  716.     MOVE.L    A3,-(A7)
  717.     MOVEA.L    $64(A6),A3    ;SV.JBPNT   Pointer to
  718.                 ; current job table entry
  719.     MOVEA.L    (A3),A3
  720.     BSET    #7,$16(A3)    ;*/mend TAS $16(A3)
  721.                 ;*/note won't work on AMIGA
  722.     MOVEA.L    (A7)+,A3
  723.     BRA.S    L0347C        ;*/modify BRA RET_TRAP
  724.                 ;*/note to save space only
  725.     endc
  726.     ifnd    NoTas
  727. L0337C:
  728. DO_TRAP3:
  729.     MOVE.L    A0,D7
  730.     JSR    L03476(PC)
  731.     TAS    $12(A0)
  732.     BNE    L03414
  733.     MOVEM.L    D2-D7/A2-A6,-(A7)
  734.     CLR.L    -(A7)
  735.     ANDI.L    #$7F,D0
  736.     CMPI.B    #$49,D0
  737.     BGT.S    L033B0
  738.     CMPI.B    #$46,D0
  739.     BGE.S    L033AE
  740.     CMPI.B    #$07,D0
  741.     BGT.S    L033B0
  742.     BTST    #1,D0
  743.     BEQ.S    L033B0
  744. L033AE:
  745.     MOVEQ    #0,D1
  746. L033B0:
  747.     MOVEA.L    $64(A6),A3
  748.     MOVEA.L    (A3),A3
  749.     BCLR    #7,$16(A3)
  750.     BEQ.S    L033C4
  751.     MOVE.L    8(A5),(A7)
  752.     ADDA.L    (A7),A1
  753. L033C4:
  754.     MOVEA.L    4(A0),A4
  755.     MOVE.B    D0,$13(A0)
  756.     MOVEQ    #0,D3
  757.     LEA    -$18(A4),A3
  758.     MOVEA.L    4(A4),A4
  759.     JSR    (A4)
  760.     SUBA.L    (A7),A1
  761.     CMPI.W    #-1,D0
  762.     BNE.S    L03422
  763.     MOVE.W    $A(A7),D3
  764.     BEQ.S    L03422
  765.     MOVEA.L    $2C(A7),A6
  766.     JSR    JOBID_ME(PC)
  767.     MOVE.L    D0,$14(A0)
  768.     LEA    $12(A0),A0
  769.     TST.L    (A7)+
  770.     BNE.S    L033FC
  771.     ST    (A0)
  772. L033FC:
  773.     MOVE.L    A0,$C(A3)
  774.     MOVE.W    D3,$14(A3)
  775.     SF    $12(A3)
  776.     MOVEQ    #-1,D0
  777.     MOVEM.L    (A7)+,D2-D7/A2-A6
  778. L0340E:
  779.     MOVEA.L    D7,A0
  780.     BRA    L00936
  781. L03414:
  782.     TST.W    D3
  783.     BEQ.S    L0341E
  784.     SUBQ.L    #2,$000E(A7)
  785.     BRA.S    L0340E
  786. L0341E:
  787.     MOVEQ    #-$01,D0
  788.     BRA.S    L0342C
  789. L03422:
  790.     ADDQ.L    #4,A7
  791.     MOVEM.L    (A7)+,D2-D7/A2-A6
  792.     SF    $12(A0)
  793. L0342C:
  794.     MOVEA.L    D7,A0
  795.     BRA.L    RET_TRAP
  796. ; --------------------------------------------------------------
  797. ;  TRAP #4
  798. ; --------------------------------------------------------------
  799. L03432:
  800. DO_TRAP4:
  801.     MOVE.L    A3,-(A7)
  802.     MOVEA.L    $64(A6),A3
  803.     MOVEA.L    (A3),A3
  804.     TAS    $16(A3)
  805.     MOVEA.L    (A7)+,A3
  806.     BRA    RET_TRAP
  807.     endc
  808. */endoverlay
  809. ; --------------------------------------------------------------
  810. ; verify wether channel is open and belongs to job
  811. L03444:
  812.     MOVE.L    A0,-(A7)
  813.     MOVE.L    D0,-(A7)
  814.     MOVE.L    A0,D0
  815.     CMP.W    $72(A6),D0    ;SV.CHMAX Highest current
  816.                 ; channel number
  817.     BHI.S    L0346E        ; -> Channel not found
  818.     LSL.W    #2,D0
  819.     MOVEA.L    $78(A6),A0    ;SV.CHBAS Pointer to base of
  820.                 ; channel table
  821.     ADDA.W    D0,A0
  822.     TST.B    (A0)        ; channel closed ?
  823.     BLT.S    L0346E        ; -> Channel not found
  824.     MOVEA.L    (A0),A0        ; get linkage block of
  825.                 ; channel
  826.     SWAP    D0
  827.     CMP.W    $10(A0),D0    ; TAG for job
  828.     BNE.S    L0346E
  829.     MOVE.L    (A7)+,D0
  830.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  831.     CMP.B    D0,D0
  832. L0346C:
  833.     RTS
  834. L0346E:
  835.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  836.     MOVEQ    #-6,D0        ; channel not found
  837.     MOVEA.L    (A7)+,A0
  838.     RTS
  839. L03476:
  840.     BSR.S    L03444        ; verify channel ID and get
  841.                 ; linkage block for ID
  842.     BEQ.S    L0346C
  843.     ADDQ.W    #4,A7        ;*/undomend ADDQ.W #4,A7
  844. L0347C:
  845.     BRA    RET_TRAP
  846. SHLST2    DC.L    0        ; last item in list of
  847.                 ; scheduler tasks
  848.     DC.L    L03488-ORG0
  849. L03488    MOVEA.L    $74(A6),A1    ; pointer to last channel
  850.                 ; checked
  851.     MOVEA.W    $72(A6),A2    ; highest current channel
  852.                 ; number
  853.     ADDA.W    A2,A2
  854.     ADDA.W    A2,A2
  855.     ADDA.L    $78(A6),A2    ; pointer to base of channel
  856.                 ; table
  857.     MOVEA.L    A1,A3
  858. L0349A    ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  859.     CMPA.L    A2,A1
  860.     BLE.S    L034A4
  861.     MOVEA.L    $78(A6),A1    ; pointer to base of channel
  862.                 ; table
  863. L034A4    TST.B    (A1)
  864.     BLT.S    L034B0
  865.     MOVEA.L    (A1),A0
  866.     MOVE.B    $12(A0),D4    ; jobs accumulated priority
  867.     BNE.S    L034B6
  868. L034B0    CMPA.L    A1,A3
  869.     BNE.S    L0349A
  870.     BRA.S    L03522
  871. L034B6:
  872.     MOVE.L    A1,$74(A6)    ;SV.CHPNT   Pointer to last
  873.                 ; channel checked
  874.                 ;*/undoinsert MOVEQ #0,D1
  875.                 ;*/note not necessary
  876.     MOVE.L    $14(A0),D1    ;*/undomodify MOVE.W $16(A0),D1
  877.     LSL.W    #2,D1        ;*/undomodify LSL.L #2,D1
  878.     MOVEA.L    $68(A6),A4    ;SV.JBBAS   Pointer to base
  879.                 ; of job table
  880.     ADDA.W    D1,A4        ;*/undomend ADDA.L D1,A4
  881.                 ;*note D1 sign exten long
  882.     TST.B    (A4)
  883.     BLT.S    L03524
  884.     MOVEA.L    (A4),A4
  885.     SWAP    D1        ;*/undomodify MOVE.W $14(A0),D1
  886.     CMP.W    $10(A4),D1
  887.     BLT.S    L03524
  888.     MOVEQ    #0,D0
  889.     MOVE.B    $13(A0),D0    ; jobs priority increment
  890.     MOVEQ    #-1,D3
  891.     MOVEM.L    $0024(A4),D1-D2
  892.     MOVEM.L    $0044(A4),A1-A2
  893.     MOVE.L    A4,-(A7)
  894.     CLR.L    -(A7)
  895.     ADDQ.B    #1,D4
  896.     BEQ.S    L034F6
  897.     MOVE.L    $0058(A4),(A7)
  898.     ADDA.L    (A7),A1
  899. L034F6:
  900.     MOVEA.L    $0004(A0),A4
  901.     LEA    -$0018(A4),A3
  902.     MOVEA.L    $0004(A4),A4
  903.     JSR    (A4)
  904.     SUBA.L    (A7)+,A1
  905.     MOVEA.L    (A7)+,A4
  906.     MOVE.L    D1,$0024(A4)
  907.     MOVE.L    A1,$0044(A4)
  908.     CMPI.B    #$FF,D0
  909.     BEQ.S    L03522
  910.     MOVE.L    D0,$0020(A4)
  911.     CLR.B    $12(A0)        ; jobs accumulated priority
  912.     CLR.W    $14(A4)        ; job status = not suspended
  913. L03522    RTS
  914. L03524    CLR.B    $12(A0)        ; jobs accumulated priority
  915.     RTS
  916. L0352A    ; used to switch MDV Motor on
  917.     MOVEM.L    D0-D3/A0-A4,-(A7)
  918.     MOVEQ    #0,D1
  919.     MOVE.B    (A1),D1
  920.     LSR.B    #4,D1
  921.     LSL.B    #2,D1
  922.     LEA    $100(A6),A2    ; SV.FSDEF pointer to file
  923.                 ; system physical def.
  924.     MOVEA.L    0(A2,D1.W),A2
  925.     MOVEA.L    $10(A2),A4
  926.     LEA    -$18(A4),A3
  927.     MOVEA.L    $10(A4),A4
  928.     JSR    (A4)
  929.     MOVEM.L    (A7)+,D0-D3/A0-A4
  930.     RTS
  931. IO_DELET ; Delete file which channel ID is in A0
  932.     ST    D3        ; signal DELETE operation
  933.     BSR.S    L03564        ; and continue like OPEN
  934.     BRA    RET_TRAP
  935. ; IO_OPEN continue for directory device drivers
  936. L0355A:
  937.     CMPI.B    #4,D3        ; 5 possible parameters : 2
  938.                 ; old, 2 new, dir
  939.     BLS.S    L03564
  940.     MOVEQ    #-15,D0        ; bad parameter
  941.     RTS
  942. L03564:
  943.     MOVEM.L    D1-D6/A3-A6,-(A7)
  944.     MOVEA.L    A0,A5
  945.     MOVE.L    #$A0,D1        ; allocate 160 bytes
  946.     JSR    MM_ALCHP(PC)    ;*/undomodify BSR MM_ALCHP
  947.     BNE    L0368A
  948.     ADDA.W    #$18,A0        ;*/undomend ADDA.L #$18,A0
  949.                 ;*/note #$18 sign exten long
  950.     LEA    $140(A6),A1    ;SV.FSLIST pointer to list
  951.                 ; of file channel defs.
  952.     JSR    UT_LINK(PC)    ;*/undomodify BSR UT_LINK
  953.     LEA    (A5),A1
  954.     JSR    L036D4(PC)    ;*/undomodify BSR L036D4
  955.     BNE    L0366E        ; give back allocated space
  956.                 ; for channel
  957.     MOVEQ    #$0F,D2
  958.     MOVEQ    #-1,D0
  959.     LEA    $140(A6),A4    ;SV.FSLIST pointer to list
  960.                 ; of file channel defs.
  961. L03596:
  962.     MOVE.L    -(A4),D3
  963.     BNE.S    L0359E
  964.     MOVE.W    D2,D0        ; highest number so far
  965.     BRA.S    L035AC
  966. L0359E:
  967.     MOVEA.L    D3,A1
  968.     CMP.B    $14(A1),D1
  969.     BNE.S    L035AC
  970.     CMPA.L    $10(A1),A2
  971.     BEQ.S    L035DC
  972. L035AC:
  973.     DBF    D2,L03596    ; continue with next number
  974.     MOVE.W    D0,D2
  975.     BLT    L0366C        ; no number found
  976.     MOVEM.L    D1-D2/A0/A2,-(A7)
  977.     MOVE.L    $20(A2),D1
  978.     JSR    MM_ALCHP(PC)    ;*/undomodify BSR MM_ALCHP
  979.     MOVEM.L    (A7)+,D1-D2/A1-A2
  980.     EXG    A0,A1
  981.     BNE    L0366E        ; give back allocated space
  982.                 ; in case of error
  983.     MOVE.L    A2,$10(A1)
  984.     MOVE.B    D1,$14(A1)
  985.                 ;*/undoinsert CLR.L D0
  986.     MOVE.W    D2,D0
  987.     LSL.W    #2,D0        ;*/undomodify LSL.L #2,D0
  988.     ADDA.W    D0,A4        ;*/undomend ADDA.L D0,A4
  989.                 ;*/note D0 sign exten long
  990.     MOVE.L    A1,(A4)
  991. L035DC:
  992.     MOVE.B    D2,5(A0)
  993.     MOVE.B    $B(A7),4(A0)
  994.     LEA    $1A(A0),A4
  995.     MOVE.W    (A5)+,D0     ; get legth of filename
  996.                 ;*/undoinsert CLR.L D3
  997.     MOVE.W    $24(A2),D3
  998.     ADDQ.W    #2,D3        ;*/undomodify ADDQ.L #2,D3
  999.     ADDA.W    D3,A5        ;*/undomnd ADDA.L D3,A5
  1000.                 ;*/note D3 sign exten long
  1001.     SUB.W    D3,D0
  1002.     BLT.S    L03660        ; -> bad name error
  1003.     CMPI.W    #$24,D0        ; length of filename too
  1004.                 ; long ?
  1005.     BGT.S    L03660        ; -> bad name error
  1006.     MOVE.W    D0,(A4)+
  1007.     BRA.S    L03604
  1008. L03602:
  1009.     MOVE.B    (A5)+,(A4)+    ; copy filename
  1010. L03604:
  1011.     DBF    D0,L03602
  1012.     MOVEA.L    A1,A5
  1013.     MOVEA.L    A0,A1
  1014. ; look for device driver with supplied name
  1015. L0360C:
  1016.     MOVEA.L    (A1),A1        ; get next driver in list
  1017.     MOVE.L    A1,D0
  1018.     BEQ.S    L03652        ; end of list
  1019.     CMP.B    5(A1),D2
  1020.     BNE.S    L0360C
  1021.     MOVEQ    #1,D0
  1022.     MOVEA.W    #$1A,A6        ;*/undomend MOVEA.L #$1A,A6
  1023.                 ;*/note #$1A sign exten long
  1024.                 ; offset to filename
  1025.     JSR    UT_CSTR(PC)    ;*/undomodify BSR UT_CSTR
  1026.                 ; compare strings
  1027.                 ; (A6,A0) - (A6,A1)
  1028.     MOVEA.L    $24(A7),A6    ; restore A6
  1029.     BNE.S    L0360C        ; try next driver
  1030.     CMPI.B    #2,4(A0)     ; open new file ? (mode 2)
  1031.     BEQ.S    L03664        ; allready exists error
  1032.     CMPI.B    #1,4(A0)     ; open old file ? (mode 0
  1033.                 ; and 1)
  1034.     BNE.S    L03668        ; in use error (old
  1035.                 ; exclusive)
  1036.     CMPI.B    #1,4(A1)     ; other file exclusive opend
  1037.                 ; ?
  1038.     BNE.S    L03668        ; in use error
  1039.     MOVE.W    6(A1),6(A0)
  1040.     MOVE.L    $C(A1),$C(A0)
  1041.     MOVE.W    #$40,$A(A0)
  1042. L03652:
  1043.     MOVEA.L    A5,A1
  1044.     TST.W    6(A0)
  1045.     BEQ.S    L03690
  1046.     SUBA.W    #$18,A0        ;*/undomend SUBA.L #$18,A0
  1047.                 ;*/note #$18 sign exten long
  1048.     BRA.S    L03684
  1049. L03660:
  1050.     MOVEQ    #-12,D0        ; bad name error
  1051.     BRA.S    L0366E        ; give back allocated space
  1052. L03664:
  1053.     MOVEQ    #-8,D0        ; already exists error
  1054.     BRA.S    L0366E
  1055. L03668:
  1056.     MOVEQ    #-9,D0        ; in use error
  1057.     BRA.S    L0366E
  1058. L0366C:
  1059.     MOVEQ    #-6,D0        ; channel not found error
  1060. ; give back allocated space in the case of an error
  1061. L0366E:
  1062.     LEA    $140(A6),A1    ;SV.FSLIST pointer to list
  1063.                 ; of file channel defs.
  1064.     JSR    MT_UNLNK(PC)    ;*/undomodify BSR MT_UNLNK
  1065.     SUBA.W    #$18,A0        ;*/undomend SUBA.L #$18,A0
  1066.                 ;*/note #$18 sign exten long
  1067.     MOVE.L    D0,D4
  1068.     JSR    MM_RECHP(PC)    ;*/undomodify BSR MM_RECHP
  1069.     MOVE.L    D4,D0
  1070.     BRA.S    L0368A
  1071. L03684:
  1072.     ADDQ.B    #1,$22(A1)
  1073.     MOVEQ    #0,D0
  1074. L0368A:
  1075.     MOVEM.L    (A7)+,D1-D6/A3-A6
  1076.     RTS
  1077. ; Look for MDV directory
  1078. L03690:
  1079.     SUBA.W    #$18,A0        ;*/undomend SUBA.L #$18,A0
  1080.                 ;*/note #$18 sign exten long
  1081.     MOVE.L    A1,-(A7)
  1082.     MOVE.L    A2,-(A7)
  1083.     LEA    -$18(A2),A3    ; start of linkage block
  1084.     MOVEA.L    8(A2),A4     ; address to open a channel
  1085.     JSR    (A4)        ; call open routine
  1086.     MOVEA.L    (A7)+,A2
  1087.     MOVEA.L    (A7)+,A1
  1088.     TST.B    $1C(A0)
  1089.     BLT.S    L036B0
  1090.     TST.L    D0
  1091.     BEQ.S    L03684
  1092. L036B0:
  1093.     ADDA.W  #$18,A0        ;*/undomend ADDA.L #$18,A0
  1094.                 ;*/note #$18 sign exten long
  1095.                 ; if error, then give back
  1096.                 ; space
  1097.     BRA.S    L0366E        ; give back allocated space
  1098. ; Format medium (pointer to name in A0)
  1099. L036B6:
  1100. IO_FORMT:
  1101.     MOVEM.L    D3-D7/A1-A5,-(A7)
  1102.     MOVEA.L    A0,A1
  1103.     JSR    L036D4(PC)    ;*/undomodify BSR.S L036D4
  1104.                 ;*/undomodify nop
  1105.     BLT.S    L036CC
  1106.     LEA    -$18(A2),A3
  1107.     MOVEA.L    $1C(A2),A4
  1108.     JSR    (A4)
  1109. L036CC:
  1110.     MOVEM.L    (A7)+,D3-D7/A1-A5
  1111.     BRA    RET_TRAP
  1112. ; verify name
  1113. L036D4:
  1114.     MOVEM.L    A1/A4,-(A7)
  1115.     MOVEA.L    $48(A6),A2    ;SV.DDLST Pointer to list of
  1116.                 ; directory device driver
  1117. L036DC:
  1118.     LEA    $24(A2),A4
  1119.     MOVE.W    (A4)+,D0
  1120.     MOVEA.L    (A7),A1
  1121.     ADDQ.W    #2,A1        ;*/undomend ADDQ.L #2,A1
  1122. L036E6:
  1123.     MOVE.B    (A1)+,D1
  1124.     BCLR    #5,D1
  1125.     CMP.B    (A4)+,D1
  1126.     BNE.S    L036F6
  1127.     SUBQ.W    #1,D0
  1128.     BGT.S    L036E6
  1129.     BRA.S    L036FE
  1130. L036F6:
  1131.     MOVEA.L    (A2),A2
  1132.     MOVE.L    A2,D0
  1133.     BNE.S    L036DC
  1134.     BRA.S    L03718
  1135. L036FE:
  1136.     MOVEQ    #0,D1
  1137.     MOVE.B    (A1)+,D1
  1138.     SUBI.B    #$30,D1
  1139.     BLE.S    L03718
  1140.     CMPI.B    #$09,D1
  1141.     BGE.S    L03718
  1142.     CMPI.B    #$5F,(A1)
  1143.     BNE.S    L03718
  1144.     MOVEQ    #0,D0
  1145.     BRA.S    L0371A
  1146. L03718:
  1147.     MOVEQ    #-$07,D0
  1148. L0371A:
  1149.     MOVEM.L    (A7)+,A1/A4
  1150.     RTS
  1151. ; align address in A2
  1152. L03720:
  1153. A0_EVEN:
  1154.     MOVE.L    A2,D2
  1155.     ADDQ.L    #1,D2
  1156.     BCLR    #0,D2
  1157.     MOVEA.L    D2,A2
  1158.     RTS
  1159. ; analyse syntax
  1160. L0372C:
  1161. IO_NAME:
  1162.     MOVEA.L    (A7),A2
  1163.     ADDQ.W    #6,A2        ;*/undomend ADDQ.L #6,A2
  1164.     MOVEM.L    D4/D7/A0/A3,-(A7)
  1165.     MOVEQ    #0,D7
  1166.     MOVE.W    (A0)+,D7
  1167.     ADD.L    A0,D7
  1168.     MOVE.W    (A2)+,D2
  1169. L0373C:
  1170.     BSR.S    L037B6
  1171.     CMP.B    (A2)+,D1
  1172.     BNE.S    L037A6
  1173.     SUBQ.B    #1,D2
  1174.     BNE.S    L0373C
  1175.     BSR.S    A0_EVEN
  1176.     MOVE.W    (A2)+,D4
  1177.     BRA.S    L03790
  1178. L0374C:
  1179.     BSR.S    A0_EVEN
  1180.     MOVE.B    (A2)+,D1
  1181.     BEQ.S    L03778
  1182.     BLT.S    L03760
  1183.     BSR.S    L037B6
  1184.     CMP.B    (A2)+,D1
  1185.     BEQ.S    L03762
  1186.     SUBQ.W    #1,A0        ;*/undomend SUBQ.L #1,A0
  1187.     MOVE.W    (A2)+,(A3)+
  1188.     BRA.S    L03790
  1189. L03760:
  1190.     ADDQ.W    #1,A2        ;*/undomend ADDQ.L #1,A2
  1191. L03762:
  1192.     MOVEA.L    A7,A1
  1193.     MOVE.W    (A2)+,-(A7)
  1194.     SUBA.L    A6,A0
  1195.     SUBA.L    A6,A1
  1196.     SUB.L    A6,D7
  1197.     JSR    CN_DTOI(PC)    ;*/undomodify BSR CN_DTOI
  1198.     ADDA.L    A6,A0
  1199.     ADD.L    A6,D7
  1200.     MOVE.W    (A7)+,(A3)+
  1201.     BRA.S    L03790
  1202. L03778:
  1203.     MOVE.B    (A2)+,D2
  1204.     EXT.W    D2
  1205.                 ;*/undoinsert EXT.L D2
  1206.     ADDA.W    D2,A2        ;*/undomend ADDA.L D2,A2
  1207.                 ;*/note D2 sign exten long
  1208.     MOVE.L    A2,-(A7)
  1209.     BSR.S    L037B6
  1210. L03782:
  1211.     CMP.B    -(A2),D1
  1212.     BEQ.S    L0378C
  1213.     SUBQ.W    #1,D2
  1214.     BNE.S    L03782
  1215.     SUBQ.W    #1,A0
  1216. L0378C:
  1217.     MOVE.W    D2,(A3)+
  1218.     MOVEA.L    (A7)+,A2
  1219. L03790:
  1220.     DBF    D4,L0374C
  1221.     CMP.L    A0,D7
  1222.     BNE.S    L0379C
  1223.     MOVEQ    #$04,D1
  1224.     BRA.S    L037AE
  1225. L0379C:
  1226.     MOVEM.L    (A7)+,D4/D7/A0/A3
  1227.     ADDQ.L    #2,(A7)
  1228.     MOVEQ    #-12,D0        ; bad name
  1229.     RTS
  1230. L037A6:
  1231.     MOVEM.L    (A7)+,D4/D7/A0/A3
  1232.     MOVEQ    #-$07,D0
  1233.     RTS
  1234. L037AE:
  1235.     MOVEM.L    (A7)+,D4/D7/A0/A3
  1236.     ADDQ.L    #4,(A7)
  1237.     RTS
  1238. L037B6:
  1239.     MOVEQ    #0,D1
  1240.     CMP.L    A0,D7
  1241.     BEQ.S    L037C8
  1242.     MOVE.B    (A0),D1
  1243.     CMPI.B    #$60,D1
  1244.     BLT.S    L037C8
  1245.     SUBI.B    #$20,D1
  1246. L037C8:
  1247.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1248.     RTS
  1249. ; Direct file handling
  1250. L037CC:
  1251. IO_SERQ:
  1252.     LEA    $18(A0),A2    ; Pointer to input queue
  1253.     CMPI.B    #3,D0
  1254.     BLS.S    L037D8
  1255.     ADDQ.W    #4,A2        ;*/undomend ADDQ.L #4,A2
  1256.                 ; output operation
  1257.                 ; => output queue
  1258. L037D8:
  1259.     TST.L    (A2)
  1260.     BEQ.S    L037F0
  1261.     MOVEA.L    (A2),A2
  1262.     JSR    IO_SERIO(PC)    ;*/undomodify BSR IO_SERIO
  1263. RLOC0C    DC.L    IO_QTEST-ORG0
  1264.     DC.L    IO_QOUT-ORG0
  1265.     DC.L    IO_QIN-ORG0    ; put a byte (D1) into a
  1266.                 ; queue (A2)
  1267.     RTS
  1268. L037F0    MOVEQ    #-15,D0        ; bad parameter
  1269.     RTS
  1270. ; install file and place extensions
  1271. L037F4:
  1272. IO_QSET:
  1273.     LEA    $10(A2,D1.W),A3
  1274.     CLR.L    (A2)+
  1275.     MOVE.L    A3,(A2)+
  1276.     SUBQ.W    #1,A3        ;*/undomend SUBQ.L #1,A3
  1277.     MOVE.L    A3,(A2)+
  1278.     MOVE.L    A3,(A2)+
  1279.     SUBA.L    #$10,A2
  1280.     RTS
  1281. L0380A:
  1282. IO_QTEST:
  1283.     MOVEQ    #-$11,D2
  1284.     ADD.L    4(A2),D2
  1285.     SUB.L    A2,D2
  1286.     MOVE.L    8(A2),D0
  1287.     MOVEA.L    12(A2),A3
  1288.     MOVE.B    (A3),D1
  1289.     SUB.L    A3,D0
  1290.     BGT.S    L03832
  1291.     BLT.S    L0382E
  1292.     TST.B    (A2)
  1293.     BLT.S    L0382A
  1294.     MOVEQ    #-1,D0        ; not complete
  1295.     RTS
  1296. L0382A:
  1297.     MOVEQ    #-10,D0        ; end of file error
  1298.     RTS
  1299. L0382E:
  1300.     ADD.L    D2,D0
  1301.     ADDQ.L    #1,D0
  1302. L03832:
  1303.     SUB.L    D0,D2
  1304.     MOVEQ    #0,D0
  1305.     RTS
  1306. ; Put byte (D1) into queue (A2)
  1307. L03838:
  1308. IO_QIN:
  1309.     TST.B    (A2)
  1310.     blt.s    L0385A        ;*/mend BNE.S    L0385A
  1311.     MOVEA.L    8(A2),A3
  1312.     MOVE.B    D1,(A3)+
  1313.     CMPA.L    4(A2),A3
  1314.     BLT.S    L0384C
  1315.     LEA    $0010(A2),A3
  1316. L0384C:
  1317.     CMPA.L    $000C(A2),A3
  1318.     BNE.S    L03856
  1319.     MOVEQ    #-1,D0
  1320.     RTS
  1321. L03856:
  1322.     MOVE.L    A3,$0008(A2)
  1323. L0385A:
  1324.     MOVEQ    #0,D0
  1325.     RTS
  1326. L0385E:
  1327. ; --------------------------------------------------------------
  1328. ;*/beginoverlay
  1329.     ifd    NoTas
  1330. IO_QOUT:
  1331.     MOVEA.L    $C(A2),A3
  1332.     CMPA.L    $8(A2),A3
  1333.     BNE.S    o03874        ;*/modify BNE.S $3874
  1334.     TST.B    (A2)
  1335.     BLT.S    L0382A        ;*/modify BLT.S $3870
  1336.     MOVEQ    #-1,D0        ; not complete error
  1337.     RTS
  1338. L03870:
  1339.                 ;*/removecode MOVEQ #-$0A,D0
  1340.                 ;*/removecode RTS
  1341. o03874:
  1342.     MOVE.B    (A3)+,D1
  1343.     CMPA.L    $4(A2),A3
  1344.     BLT.S    o03880        ;*/modify BLT.S $3880
  1345.     LEA    $10(A2),A3
  1346. o03880:
  1347.     MOVE.L    A3,$C(A2)
  1348.     MOVEQ    #0,D0
  1349.     RTS
  1350. o03888:
  1351. IO_QEOF:
  1352.     BSET    #7,(A2)        ;*/mend TAS (A2)
  1353.                 ;*/note won't work on AMIGA
  1354.     RTS
  1355. ;*/beginfilling
  1356. NOP0388C:
  1357.     DCB.w    ($388C-(NOP0388C-ORGN))/2,$4E71
  1358. L0388C:
  1359. ;*/endfilling
  1360.     endc
  1361.     ifnd    NoTas
  1362. IO_QOUT:
  1363.     MOVEA.L    $C(A2),A3
  1364.     CMPA.L    $8(A2),A3
  1365.     BNE.S    L03874
  1366.     TST.B    (A2)
  1367.     BLT.S    L03870
  1368.     MOVEQ    #-1,D0        ; not complete error
  1369.     RTS
  1370. L03870:
  1371.     MOVEQ    #-$0A,D0
  1372.     RTS
  1373. L03874:
  1374.     MOVE.B    (A3)+,D1
  1375.     CMPA.L    $4(A2),A3
  1376.     BLT.S    L03880
  1377.     LEA    $10(A2),A3
  1378. L03880:
  1379.     MOVE.L    A3,$C(A2)
  1380.     MOVEQ    #0,D0
  1381.     RTS
  1382. L03888:
  1383. IO_QEOF:
  1384.     TAS    (A2)
  1385.     RTS
  1386.     endc
  1387. ;*/endoverlay
  1388. ; --------------------------------------------------------------
  1389. ; after the BSR there must be 3 long words (test/fetch/send)
  1390. IO_SERIO:
  1391.     ADDI.L    #$C,(A7)
  1392.     MOVEA.L    (A7),A4
  1393.     MOVE.L    D2,D4
  1394.     MOVE.L    D1,D5
  1395.     CMPI.W    #$45,D0        ; separate file read or
  1396.                 ; write operation
  1397.     BHI.S    L038B2
  1398.     CMPI.W    #7,D0        ; Separate I/O call
  1399.     BHI.S    SERIO_BAdpar
  1400.     ANDI.L    #$0000FFFF,D4
  1401.     MOVE.B    L038C0(PC,D0.W),D0
  1402.     JMP    L038C0(PC,D0.W)
  1403. L038B2:
  1404.     CMPI.B    #$49,D0        ; FS.SAVE is the last
  1405.                 ; defined routine number
  1406.     BHI.S    SERIO_BAdpar
  1407.     MOVE.B    L038C0-$3E(PC,D0.W),D0
  1408.     JMP    L038C0(PC,D0.W)
  1409. L038C0:
  1410.     DC.B    SERIO_PEnd-L038C0
  1411.     DC.B    SERIO_FByte-L038C0
  1412.     DC.B    SERIO_FLine-L038C0
  1413.     DC.B    SERIO_FStrg-L038C0
  1414.     DC.B    SERIO_BAdpar-L038C0
  1415.     DC.B    SERIO_SByte-L038C0
  1416.     DC.B    SERIO_BAdpar-L038C0
  1417.     DC.B    SERIO_SStrg-L038C0
  1418.     DC.B    SERIO_SHead-L038C0
  1419.     DC.B    SERIO_RHead-L038C0
  1420.     DC.B    SERIO_LOad-L038C0
  1421.     DC.B    SERIO_SAve-L038C0
  1422. L038CC:
  1423. SERIO_FLine:
  1424.     MOVE.L -8(A4),A4
  1425. L038D0:
  1426.     CMP.L    D5,D4
  1427.     BLS.S    L03918
  1428.     BSR.S    L03922
  1429.     BNE.S    L0391E
  1430.     MOVE.B    D1,(A1)+
  1431.     ADDQ.L    #1,D5
  1432.     CMPI.B    #$0A,D1
  1433.     BNE.S    L038D0
  1434.     BRA.S    L0391E
  1435. L038E4:
  1436. SERIO_SStrg:
  1437. SERIO_SAve:
  1438.     MOVEA.L    -4(A4),A4
  1439. L038E8:
  1440.     CMP.L    D5,D4
  1441.     BLS.S    L0391C
  1442.     MOVE.B    (A1),D1
  1443.     BSR.S    L03922
  1444.     BNE.S    L0391E
  1445.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  1446.     ADDQ.L    #1,D5
  1447.     BRA.S    L038E8
  1448. L038F8:
  1449. SERIO_FStrg:
  1450. SERIO_LOad:
  1451.     MOVEA.L    -8(A4),A4
  1452. L038FC:
  1453.     CMP.L    D5,D4
  1454.     BLS.S    L0391C
  1455.     BSR.S    L03922
  1456.     BNE.S    L0391E
  1457.     MOVE.B    D1,(A1)+
  1458.     ADDQ.L    #1,D5
  1459.     BRA.S    L038FC
  1460. L0390A:
  1461. SERIO_PEnd:
  1462.     SUBQ.W #4,A4        ;*/undomend SUBQ.L #4,A4
  1463. L0390C:
  1464. SERIO_FByte:
  1465.     SUBQ.W #4,A4        ;*/undomend SUBQ.L #4,A4
  1466. L0390E:
  1467. SERIO_SByte:
  1468.     MOVEA.L -4(A4),A4
  1469.     BRA.S    L03922
  1470. ; Bad IO call
  1471. L03914:
  1472. SERIO_BAdpar:
  1473.     MOVEQ    #-15,D0
  1474.     BRA.S    L0392C
  1475. L03918:
  1476.     MOVEQ    #-5,D0
  1477.     BRA.S    L0391E
  1478. L0391C:
  1479.     MOVEQ    #0,D0
  1480. L0391E:
  1481.     MOVE.L    D5,D1
  1482.     BRA.S    L0392C
  1483. L03922:
  1484.     MOVEM.L    D4-D5/A1/A4,-(A7)
  1485.     JSR    (A4)
  1486.     MOVEM.L    (A7)+,D4-D5/A1/A4
  1487. L0392C:
  1488.     TST.L    D0
  1489.     RTS
  1490. L03930:
  1491. SERIO_SHead:
  1492.     MOVEA.L    -4(A4),A4
  1493.     MOVEQ    #$0F,D4
  1494.     TST.W    D5
  1495.     BGT.S    L038E8
  1496.     ST    D1
  1497.     BSR.S    L03922
  1498.     BNE.S    L0391E
  1499.     MOVEQ    #1,D5
  1500.     BRA.S    L038E8
  1501. L03944:
  1502. SERIO_RHead:
  1503.     MOVEQ    #$0F,D4
  1504.     TST.W    D5
  1505.     BGT.S    SERIO_FStrg
  1506.     MOVEA.L    -12(A4),A4
  1507.     BSR.S    L03922
  1508.     BNE.S    L0391E
  1509.     ADDQ.B    #1,D1
  1510.     BNE.S    SERIO_BAdpar    ;*/mend BNE.S SERIO_SStrg !
  1511.     MOVEA.L    (A7),A4
  1512.     BSR.S    SERIO_FByte
  1513.     MOVEQ    #1,D5
  1514.     BRA.S    L038FC
  1515. L0395E:
  1516. UT_ERR0:
  1517.     MOVE.L    A0,-(A7)
  1518.     SUBA.L    A0,A0
  1519.     BSR.S    UT_ERR
  1520.     MOVEA.L    (A7)+,A0
  1521.     RTS
  1522. L03968:
  1523. UT_ERR:
  1524.     TST.L    D0
  1525.     BGE.S    L0398E
  1526.     movem.l    d0-d3/d5/a1-a2,-(a7) ;*/modify MOVEM.L  D0-D3/A1,-(A7)
  1527.     MOVEA.L    D0,A1
  1528.     ADD.L    D0,D0
  1529.     BVS.S    L03986
  1530.     NEG.W    D0
  1531.     move.w    d0,d5        ;*/insert
  1532.     bsr    MSG_FIX        ;*/mend MOVEA.L  $2814A,A1
  1533.                 ;*/modify MOVE.W     0(A1,D0.W),D0
  1534.     move.l    a2,a1        ;*/modify LEA     0(A1,D0.W),A1
  1535.  
  1536. L03986:
  1537.     JSR    UT_MTEXT(PC)    ;*/undomodify BSR.S UT_MTEXT
  1538.                 ;*/undomodify nop
  1539.     movem.l    (a7)+,d0-d3/d5/a1-a2 ;*/modify MOVEM.L  (A7)+,D0-D3/A1
  1540. L0398E:
  1541.     RTS
  1542.  
  1543. ;*/beginfilling
  1544. NOP03990:
  1545.     DCB.w    ($3990-(NOP03990-ORGN))/2,$4E71
  1546. ;*/endfilling
  1547.  
  1548. L03990:
  1549. UT_MINT:
  1550.     MOVE.L    A6,-(A7)
  1551.     SUBA.L    A6,A6
  1552.     MOVEA.L    A7,A1
  1553.     SUBQ.W    #8,A7        ;*/undomend SUBQ.L #8,A7
  1554.     MOVE.L    A0,-(A7)
  1555.     LEA    4(A7),A0
  1556.     MOVE.W    D1,-(A1)
  1557.     JSR    CN_ITOD(PC)    ;*/undomodify BSR CN_ITOD
  1558.     MOVEA.L    (A7)+,A0
  1559.     MOVEA.L    A7,A1
  1560.     MOVE.W    D1,D2
  1561.     BSR.S    L039B4
  1562.     ADDQ.W    #8,A7        ;*/undomodify ADDQ.L #8,A7
  1563.     MOVEA.L    (A7)+,A6
  1564.     RTS
  1565. L039B2:
  1566. UT_MTEXT:
  1567.     MOVE.W    (A1)+,D2
  1568. L039B4:
  1569.     MOVEQ    #7,D0        ; IO.SSTRG send string of
  1570.                 ; bytes
  1571.     MOVE.L    A0,D3
  1572.     BEQ.S    L039BE
  1573.     MOVEQ    #-1,D3
  1574.     BRA.S    L039C4
  1575. L039BE:
  1576.     SF    $28033        ; screen status (0=active)
  1577. L039C4:
  1578.     TRAP    #3
  1579.     CMPI.W    #$FFFF,D0
  1580.     BNE.S    L039D8
  1581.     MOVEA.L    #$00010001,A0    ; Basic screen channel #1
  1582.     MOVEQ    #7,D0        ; IO.SSTRG sends a string of
  1583.                 ; bytes
  1584.     TRAP    #3
  1585.     SUBA.L    A0,A0
  1586. L039D8:
  1587.     TST.L    D0
  1588.     RTS
  1589. L039DC:
  1590. UT_LINK:
  1591.     MOVE.L    (A1),(A0)
  1592.     MOVE.L    A0,(A1)
  1593.     RTS
  1594. L039E2:
  1595. MT_UNLNK:
  1596.     CMPA.L    (A1),A0
  1597.     BEQ.S    L039EE
  1598.     TST.L    (A1)
  1599.     BEQ.S    L039F0
  1600.     MOVEA.L    (A1),A1
  1601.     BRA.S    MT_UNLNK
  1602. L039EE:
  1603.     MOVE.L    (A0),(A1)
  1604. L039F0:
  1605.     RTS
  1606. UT_WINDW:
  1607.     BSR.S    OPE_WNDW
  1608.     BRA.S    L03A0C
  1609. UT_CON:
  1610.     LEA    CON_STR(PC),A0
  1611.     BRA.S    L03A00
  1612. UT_SCR:
  1613.     LEA    SCR_STR(PC),A0
  1614. L03A00    BSR.S    OPE_WNDW
  1615. L03A02    addq.w    #4,a1        ;*/undomend ADDQ.L #4,A1
  1616.     MOVEQ    #$0D,D0        ; SD.WDEF redefines a window
  1617.     MOVEQ    #0,D2
  1618.     BSR.S    L03A36
  1619.     SUBQ.W    #4,A1        ;*/undomend SUBQ.L #4,A1
  1620. L03A0C    MOVEQ    #$0C,D0        ; SD.BORDR Sets border width
  1621.                 ; and colour
  1622.     MOVE.B    (A1)+,D1
  1623.     MOVE.B    (A1)+,D2
  1624.     BSR.S    L03A36
  1625.     MOVEQ    #$27,D0        ; SD.SETPA set paper colour
  1626.     MOVE.B    (A1),D1
  1627.     BSR.S    L03A36
  1628.     MOVEQ    #$28,D0        ; SD.SETST set strip colour
  1629.     MOVE.B    (A1)+,D1
  1630.     BSR.S    L03A36
  1631.     MOVEQ    #$29,D0        ; SD.SETIN sets ink colour
  1632.     MOVE.B    (A1),D1
  1633.     BSR.S    L03A36
  1634.     MOVEQ    #$20,D0        ; SD.CLEAR clears all of a
  1635.                 ; window
  1636.     BRA.S    L03A36
  1637. OPE_WNDW ; Open window
  1638.     MOVE.L    A1,-(A7)
  1639.     MOVEQ    #1,D0        ; IO.OPEN
  1640.     MOVEQ    #-1,D1
  1641.     MOVEQ    #0,D3        ; old file or device
  1642.     TRAP    #2
  1643.     BRA.S    L03A3A
  1644. L03A36    ; window trap
  1645.     MOVE.L    A1,-(A7)
  1646.     TRAP    #3
  1647. L03A3A    MOVEA.L    (A7)+,A1
  1648.     TST.L    D0
  1649.     BEQ.S    L03A42
  1650.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  1651. L03A42    RTS
  1652. CON_STR    DC.B    0,3,'CON',0
  1653. SCR_STR    DC.B    0,3,'SCR',0
  1654. L03A50    ; set pointer for string comparision
  1655.     MOVEQ    #0,D4
  1656.     MOVE.B    D0,D4
  1657.     ROR.L    #1,D4
  1658.     SUBQ.B    #2,D4
  1659.     MOVE.W    0(A6,A0.L),D0
  1660.     ADDQ.W    #2,A0        ;*/undomend ADDQ.L #2,A0
  1661.     LEA    0(A0,D0.W),A2
  1662.     MOVE.W    0(A6,A1.L),D1
  1663.     ADDQ.W    #2,A1        ;*/undomend ADDQ.L #2,A1
  1664.     LEA    0(A1,D1.W),A3
  1665.     RTS
  1666. L03A6E    ; find position of string 2 in string 1
  1667.     MOVEM.L    D4/A0-A4,-(A7)
  1668.     BSR.S    L03A50
  1669.     LEA    0(A1,D0.W),A4
  1670.     EXG    A4,A3
  1671.     MOVEQ    #0,D1
  1672. L03A7C    CMPA.L    A4,A3
  1673.     BGT.S    L03A8C
  1674.     ADDQ.L    #1,D1
  1675.     BSR.S    L03A96
  1676.     BEQ.S    L03A90
  1677.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  1678.     ADDQ.W    #1,A3        ;*/undomend ADDQ.L #1,A3
  1679.     BRA.S    L03A7C
  1680. L03A8C    MOVEQ    #0,D1
  1681.     MOVEQ    #0,D0
  1682. L03A90    MOVEM.L    (A7)+,D4/A0-A4
  1683.     RTS
  1684. L03A96    MOVEM.L    D1-D5/A0-A3,-(A7)
  1685.     BRA.S    L03AA2
  1686. UT_CSTR    MOVEM.L    D1-D5/A0-A3,-(A7)
  1687.     BSR.S    L03A50
  1688. L03AA2    CMPA.L    A2,A0
  1689.     BNE.S    L03AAC
  1690.     CMPA.L    A3,A1
  1691.     BNE.S    L03AC8
  1692.     BRA.S    L03ACC
  1693. L03AAC    CMPA.L    A3,A1
  1694.     BEQ.S    L03AD0
  1695.     BSR.S    L03AE8
  1696.     CMP.B    D4,D0
  1697.     BEQ.S    L03B2C
  1698.     CMP.B    D3,D2
  1699.     BNE.S    L03AC6
  1700.     TST.B    D0
  1701.     BLE.S    L03AA2
  1702.     TST.L    D4
  1703.     BLT.S    L03AA2
  1704.     CMPI.B    #$02,D0
  1705. L03AC6    BGT.S    L03AD0
  1706. L03AC8    MOVEQ    #-1,D0
  1707.     BRA.S    L03AD2
  1708. L03ACC    MOVEQ    #0,D0
  1709.     BRA.S    L03AD2
  1710. L03AD0    MOVEQ    #1,D0
  1711. L03AD2    MOVEM.L    (A7)+,D1-D5/A0-A3
  1712.     RTS
  1713. L03AD8    ; table of results of string comparision
  1714.     DC.W    0,0,$FF,0,0,1,0,$300
  1715. L03AE8    ; compare bytes of string
  1716.     EXG    A1,A0
  1717.     EXG    A3,A2
  1718.     BSR.S    L03B04
  1719.     EXG    A1,A0
  1720.     EXG    A3,A2
  1721.     MOVE.B    D0,D1
  1722.     MOVE.B    D2,D3
  1723.     BSR.S    L03B04
  1724.     LSL.B    #2,D0
  1725.     ADD.B    D1,D0
  1726.     EXT.W    D0
  1727.     MOVE.B    L03AD8(PC,D0.W),D0 ; get result of string
  1728.                  ; comparision
  1729.     RTS
  1730. L03B04    ; correct decimal values (3.5)
  1731.     MOVE.B    0(A6,A0.L),D2
  1732.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1733.     BSR    L03BFA
  1734.     CMPI.B    #$CE,D2
  1735.     BNE.S    L03B2A
  1736.     CMPA.L    A2,A0
  1737.     BEQ.S    L03B28
  1738.     CMPI.B    #$30,0(A6,A0.L)
  1739.     BLT.S    L03B28
  1740.     CMPI.B    #$39,0(A6,A0.L)
  1741.     BLE.S    L03B2A
  1742. L03B28    CLR.B    D0
  1743. L03B2A    RTS
  1744. L03B2C    ; compare two ASCII numbers
  1745.     BSR.S    L03B96
  1746.     MOVE.W    D3,D2
  1747.     MOVE.W    D1,D3
  1748.     EXG    A1,A0
  1749.     EXG    A3,A2
  1750.     BSR.S    L03B96
  1751.     CMP.W    D1,D3
  1752. L03B3A    BNE.S    L03AC6
  1753.     SUBA.W    D1,A0        ;!!! word length may cause
  1754.                 ; errors !!!
  1755.     SUBA.W    D1,A1
  1756.     BRA.S    L03B50
  1757. L03B42    MOVE.B    0(A6,A1.L),D5
  1758.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  1759.     CMP.B    0(A6,A0.L),D5
  1760.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1761.     BNE.S    L03B3A
  1762. L03B50    DBF    D1,L03B42
  1763.     BSR.S    L03BCC
  1764.     MOVE.W    D3,-(A7)
  1765.     MOVE.W    D1,-(A7)
  1766.     EXG    A1,A0
  1767.     EXG    A3,A2
  1768.     BSR.S    L03BCC
  1769.     MOVE.W    (A7)+,D0
  1770.     MOVE.W    (A7)+,D2
  1771.     SUB.W    D2,D3
  1772.     BGT.S    L03B6A
  1773.     ADD.W    D3,D2
  1774. L03B6A    TST.W    D2
  1775.     BEQ.S    L03B8C
  1776.     SUBA.W    D1,A0        ;!!! word length may cause
  1777.                 ; errors !!!
  1778.     SUBA.W    D0,A1
  1779.     SUB.W    D2,D1
  1780.     SUB.W    D2,D0
  1781. L03B76    MOVE.B    0(A6,A0.L),D5
  1782.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1783.     CMP.B    0(A6,A1.L),D5
  1784.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  1785.     BNE.S    L03B3A
  1786.     SUBQ.W    #1,D2
  1787.     BNE.S    L03B76
  1788.     ADDA.W    D1,A0        ;!!! word length may cause
  1789.                 ; errors !!!
  1790.     ADDA.W    D0,A1
  1791. L03B8C    TST.W    D3
  1792.     BNE    L03AC6
  1793.     BRA    L03AA2
  1794. L03B96    MOVEQ    #0,D1
  1795. L03B98    CMPI.B    #$D0,D2
  1796.     BNE.S    L03BB0
  1797.     CMPA.L    A2,A0
  1798.     BEQ.S    L03BCA
  1799.     MOVE.B    0(A6,A0.L),D2
  1800.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1801.     BSR.S    L03BFA
  1802.     SUBQ.B    #1,D0
  1803.     BNE.S    L03BC8
  1804.     BRA.S    L03B98
  1805. L03BB0    CMPI.B    #$CE,D2
  1806.     BEQ.S    L03BC8
  1807.     ADDQ.W    #1,D1        ;*/undomend ADDQ.L #1,D1
  1808.     CMPA.L    A2,A0
  1809.     BEQ.S    L03BCA
  1810.     MOVE.B    0(A6,A0.L),D2
  1811.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1812.     BSR.S    L03BFA
  1813.     SUBQ.B    #1,D0
  1814.     BEQ.S    L03BB0
  1815. L03BC8    SUBQ.W    #1,A0        ;*/undomend SUBQ.L #1,A0
  1816. L03BCA    RTS
  1817. L03BCC    MOVEQ    #0,D1
  1818.     MOVEQ    #0,D3
  1819. L03BD0    CMPA.L    A2,A0
  1820.     BEQ.S    L03BF8
  1821.     MOVE.B    0(A6,A0.L),D2
  1822.     BSR.S    L03BFA
  1823.     SUBQ.B    #1,D0
  1824.     BNE.S    L03BF8
  1825.     CMPI.B    #$CE,D2
  1826.     BNE.S    L03BEA
  1827.     TST.L    D1
  1828.     BNE.S    L03BF8
  1829.     MOVEQ    #-$01,D1
  1830. L03BEA    ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1831.     ADDQ.W    #1,D1
  1832.     CMPI.B    #$D0,D2
  1833.     BEQ.S    L03BD0
  1834.     MOVE.W    D1,D3
  1835.     BRA.S    L03BD0
  1836. L03BF8    RTS
  1837. L03BFA    MOVE.B    D2,D0
  1838.     BLT.S    L03C14
  1839.     CMPI.B    #$2E,D0
  1840.     BEQ.S    L03C18
  1841.     EXT.W    D0
  1842.     ADDI.W    #$002E,D0
  1843.     MOVE.B    L03BFA(PC,D0.W),D0
  1844.     BEQ.S    L03C14
  1845.     SUBQ.B    #2,D0
  1846.     BLE.S    L03C18
  1847. L03C14    CLR.B    D0
  1848.     RTS
  1849. L03C18    MOVE.B    D2,D0
  1850.     ADDI.B    #$A0,D2
  1851.     BCC.S    L03C24
  1852.     SUBI.B    #$20,D2
  1853. L03C24    LSR.B    #5,D0
  1854.     RTS
  1855. L03C28    ; this table defines type of ASCII code
  1856.     DC.L    $00000000,$00000000,$00000000,$00000000
  1857.     DC.L    $00000000,$00000000,$00000000,$00000000
  1858.     DC.L    $20030000,$24250003,$00000000,$03000000
  1859.     DC.L    $02020202,$02020202,$02020003,$00000000
  1860.     DC.L    $00010101,$01010101,$01010101,$01010101
  1861.     DC.L    $01010101,$01010101,$01010100,$00000001
  1862.     DC.L    $00010101,$01010101,$01010101,$01010101
  1863.     DC.L    $01010101,$01010101,$01010100,$00000000
  1864. L03CA8    ; test sign of number to convert to floatinpoint number
  1865.     CMP.L    A0,D7
  1866.     BEQ.S    L03CCA
  1867.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1868. L03CAE    CMPI.B    #$20,0(A6,A0.L)
  1869.     BEQ.S    L03CA8
  1870.     MOVEQ    #0,D5
  1871.     MOVEQ    #$2B,D6
  1872.     SUB.B    0(A6,A0.L),D6
  1873.     BEQ.S    L03CC8
  1874.     ADDQ.B    #2,D6
  1875.     BNE.S    L03CCA
  1876.     BSET    #$1F,D5
  1877. L03CC8    ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1878. L03CCA    RTS
  1879. L03CCC    ; convert ASCII to decimal
  1880.     MOVEQ    #0,D6
  1881.     CMP.L    A0,D7
  1882.     BEQ.S    L03CEA
  1883.     MOVE.B    0(A6,A0.L),D6
  1884.     SUBI.W    #'0',D6
  1885.     BLT.S    L03CE6
  1886.     CMPI.W    #9,D6
  1887.     BGT.S    L03CE6
  1888.     ADDQ.L    #2,(A7)
  1889.     BRA.S    L03CEA
  1890. L03CE6    ADDI.W    #$0030,D6
  1891. L03CEA    ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  1892.     RTS
  1893. L03CEE    ; convert entire number from ASCII to decimal
  1894.     BSR.S    L03CAE
  1895.     BSR.S    L03CCC        ; convert ASCII to decimal
  1896.     BRA.S    L03D08        ; error
  1897.     MOVE.L    D6,D3
  1898. L03CF6    BSR.S    L03CCC        ; convert ASCII to decimal
  1899.     BRA.S    L03D0C        ; error
  1900.     MULU    #10,D3
  1901.     ADD.L    D6,D3
  1902.     CMPI.L    #$00007FFF,D3
  1903.     BLE.S    L03CF6
  1904. L03D08    MOVEQ    #-17,D0        ; Error in expression
  1905.     RTS
  1906. L03D0C    ; test sign + / -
  1907.     TST.L    D5
  1908.     BPL.S    L03D12
  1909.     NEG.W    D3
  1910. L03D12    MOVEQ    #0,D0
  1911.     RTS
  1912. CN_DTOF    ; vector $100 : convert ASCII to floatingpoint
  1913.     MOVEM.L    D3-D6/A0-A1,-(A7)
  1914.     MOVEQ    #0,D4
  1915.     BSR.S    L03CAE
  1916.     SUBQ.W    #6,A1        ;*/undomend SUBQ.L #6,A1
  1917.     CLR.L    2(A6,A1.L)
  1918.     CLR.W    0(A6,A1.L)
  1919. L03D28    BSR.S    L03CCC        ; convert ASCII to decimal
  1920.     BRA.S    L03D48
  1921.     MOVE.B    #$DF,D5
  1922.     TST.W    D4
  1923.     BEQ.S    L03D36
  1924.     ADDQ.W    #1,D4
  1925. L03D36    BSR.S    L03DB6
  1926.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  1927.     BNE.S    L03DB0
  1928.     MOVE.L    D6,D1
  1929.     BSR.S    L03DB8
  1930.     JSR    RI_ADD(PC)    ;*/undomodify BSR RI_ADD
  1931.     BRA.S    L03D28
  1932. L03D48    CMPI.B    #$2E,D6
  1933.     BNE.S    L03D56
  1934.     TST.W    D4
  1935.     BNE.S    L03DAE
  1936.     MOVEQ    #$01,D4
  1937.     BRA.S    L03D28
  1938. L03D56    TST.B    D5
  1939.     BEQ.S    L03DAE
  1940.     TST.L    D5
  1941.     BPL.S    L03D62
  1942.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  1943. L03D62    MOVEQ    #0,D3
  1944.     AND.B    D5,D6
  1945.     CMPI.B    #$45,D6
  1946.     BNE.S    L03D70
  1947.     BSR.S    L03CEE
  1948.     BNE.S    L03DB0
  1949. L03D70    TST.W    D4
  1950.     BEQ.S    L03D76
  1951.     SUBQ.W    #1,D4
  1952. L03D76    SUB.W    D3,D4
  1953.     BVS.S    L03DAE
  1954.     BEQ.S    L03DA2
  1955.     SGE    D5
  1956.     BGE.S    L03D82
  1957.     NEG.W    D4
  1958. L03D82    BSR.S    L03DB6
  1959.     SUBQ.W    #2,A1        ;*/undomend SUBQ.L #2,A1
  1960.     MOVE.W    D4,0(A6,A1.L)
  1961.     JSR    L047DC(PC)    ;*/undomodify BSR L047DC
  1962.     BNE.S    L03DB0
  1963.     TST.B    D5
  1964.     BEQ.S    L03D9C
  1965.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  1966.     BNE.S    L03DB0
  1967.     BRA.S    L03DA2
  1968. L03D9C    JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  1969.     BNE.S    L03DB0
  1970. L03DA2    MOVEM.L    (A7)+,D3-D6
  1971.     SUBQ.W    #1,A0        ;*/undomodify SUBQ.L #1,A0
  1972.     ADDQ.W    #8,A7        ;*/undomodify ADDQ.L #8,A7
  1973.     MOVEQ    #0,D0
  1974.     RTS
  1975. L03DAE    MOVEQ    #-$11,D0
  1976. L03DB0    MOVEM.L    (A7)+,D3-D6/A0-A1
  1977.     RTS
  1978. L03DB6    MOVEQ    #$0A,D1
  1979. L03DB8    MOVE.L    #$0000081F,D0
  1980.     JMP    L04830(PC)    ;*/undomodify BRA L04830
  1981. CN_DTOI    ; vector $102 : convert number to ASCII
  1982.     MOVEM.L    D3-D6/A0-A1,-(A7)
  1983.     BSR    L03CEE
  1984.     BNE.S    L03DB0
  1985.     SUBQ.W    #2,A1        ;*/undomend SUBQ.L #2,A1
  1986.     MOVE.W    D3,0(A6,A1.L)
  1987.     BRA.S    L03DA2
  1988. CN_HTOIB:
  1989.     MOVEQ    #$02,D2
  1990.     BRA.S    CN_HTOI
  1991. CN_HTOIW:
  1992.     MOVEQ    #$04,D2
  1993.     BRA.S    CN_HTOI
  1994. CN_HTOIL:
  1995.     MOVEQ    #$08,D2
  1996. CN_HTOI:
  1997.     MOVEM.L    D3-D6/A0-A1,-(A7)
  1998.     MOVE.L    D2,D4
  1999.     LSR.B    #1,D4
  2000.     SUBQ.W    #2,A1        ;*/undomend SUBQ.L #2,A1
  2001.     MOVE.B    D4,$01(A6,A1.L)
  2002.     MOVE.B    #$0F,0(A6,A1.L)
  2003.     MOVEQ    #$04,D4
  2004. L03DF4    MOVE.L    D2,D5
  2005.     MOVEQ    #0,D3
  2006. L03DF8    BSR    L03CCC        ; convert ASCII to decimal
  2007.     BRA.S    L03E00        ; error
  2008.     BRA.S    L03E0E        ; ok
  2009. L03E00    ANDI.B    #$DF,D6
  2010.     SUBI.B    #'A',D6
  2011.     BLT.S    L03E1E
  2012.     ADDI.B    #10,D6
  2013. L03E0E    CMP.B    0(A6,A1.L),D6
  2014.     BHI.S    L03E1E
  2015.     LSL.L    D4,D3
  2016.     ADD.L    D6,D3
  2017.     DBF    D2,L03DF8
  2018.     BRA.S    L03E30
  2019. L03E1E    MOVE.B    $01(A6,A1.L),D4
  2020.     ADDQ.L    #2,A1
  2021.     MOVE.L    D3,-$04(A6,A1.L)
  2022.     SUBA.L    D4,A1
  2023.     CMP.W    D2,D5
  2024.     BGT    L03DA2
  2025. L03E30    BRA    L03DAE
  2026. CN_BTOIB:
  2027.     MOVEQ    #$08,D2
  2028.     BRA.S    L03E3E
  2029. CN_BTOIW:
  2030.     MOVEQ    #$10,D2
  2031.     BRA.S    L03E3E
  2032. CN_BTOIL:
  2033.     MOVEQ    #$20,D2
  2034. L03E3E    MOVEM.L    D3-D6/A0-A1,-(A7)
  2035.     MOVE.L    D2,D4
  2036.     LSR.B    #3,D4
  2037.     SUBQ.W    #2,A1        ;*/undomend SUBQ.L #2,A1
  2038.     MOVE.B    D4,$01(A6,A1.L)
  2039.     MOVEQ    #$01,D4
  2040.     MOVE.B    D4,0(A6,A1.L)
  2041.     BRA.S    L03DF4
  2042. CN_ITOD    MOVE.L    A2,-(A7)
  2043.     MOVE.L    A0,-(A7)
  2044.     MOVEQ    #0,D0
  2045.     MOVE.W    0(A6,A1.L),D0
  2046.     ADDQ.W    #2,A1        ;*/undomend ADDQ.L #2,A1
  2047.     BGE.S    L03E6C
  2048.     MOVE.B    #$2D,0(A6,A0.L)
  2049.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2050.     NEG.W    D0
  2051. L03E6C    MOVE.L    A0,-(A7)
  2052.     ADDQ.W    #5,A0        ;*/undomend ADDQ.L #5,A0
  2053. L03E70    DIVU    #10,D0
  2054.     SWAP    D0
  2055.     ADDI.B    #$30,D0
  2056.     SUBQ.W    #1,A0        ;*/undomend SUBQ.L #1,A0
  2057.     MOVE.B    D0,0(A6,A0.L)
  2058.     CLR.W    D0
  2059.     SWAP    D0
  2060.     BNE.S    L03E70
  2061.     MOVE.L    (A7)+,D1
  2062.     SUB.L    A0,D1
  2063.     MOVE.W    D1,D0
  2064.     ADDQ.W    #4,D0
  2065. L03E8E    LEA    0(A0,D1.W),A2
  2066.     MOVE.B    0(A6,A0.L),0(A6,A2.L)
  2067.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2068.     DBF    D0,L03E8E
  2069.     ADD.L    A0,D1
  2070.     MOVEA.L    D1,A0
  2071.     SUB.L    (A7)+,D1
  2072.     MOVEA.L    (A7)+,A2
  2073.     RTS
  2074. CN_ITOHL:
  2075.     bsr.l    CN_ITOHW     ; not possible to have short
  2076.                 ; branch to next instruction
  2077. CN_ITOHW:
  2078.     bsr.l    CN_ITOHB     ; ditto
  2079. CN_ITOHB:
  2080.     MOVE.B    0(A6,A1.L),D0
  2081.     LSR.B    #4,D0
  2082.     BSR.S    L03EC0
  2083.     MOVEQ    #$0F,D0
  2084.     AND.B    0(A6,A1.L),D0
  2085.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  2086. L03EC0    ADDI.B    #$30,D0
  2087.     CMPI.B    #$39,D0
  2088.     BLS.S    L03ECC
  2089.     ADDQ.B    #7,D0
  2090. L03ECC    MOVE.B    D0,0(A6,A0.L)
  2091.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2092.     RTS
  2093. CN_ITOBL:
  2094.     bsr.l    CN_ITOBW     ; not possible to have short
  2095.                 ; branch to next instruction
  2096. CN_ITOBW:
  2097.     bsr.l    CN_ITOBB     ; ditto
  2098. CN_ITOBB:
  2099.     MOVEQ    #7,D0
  2100. L03EDE    BTST    D0,0(A6,A1.L)
  2101.     SEQ    0(A6,A0.L)
  2102.     ADDI.B    #$31,0(A6,A0.L)
  2103.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2104.     DBF    D0,L03EDE
  2105.     ADDQ.W    #1,A1        ;*/undomend ADDQ.L #1,A1
  2106.     RTS
  2107. CN_FTOD:
  2108.     MOVEM.L    D2-D5,-(A7)
  2109.     MOVE.L    A0,-(A7)
  2110.     TST.L    $02(A6,A1.L)
  2111.     BEQ    L04000
  2112.  
  2113. ; --------------------------------------------------------------
  2114. ;*/beginoverlay
  2115. ; modified to allow for eight digit precision
  2116. ; based on hack by S N Goodwin
  2117.  
  2118.     MOVEQ    #$07,D4        ;*/modify MOVEQ #$06,D4
  2119.     MOVE.L    D4,D5        ;*/insertcode
  2120.     TST.B    $02(A6,A1.L)
  2121.     BGE.S    L03F18
  2122.     MOVE.B    #$2D,0(A6,A0.L)
  2123.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2124.     JSR    RI_NEG(PC)    ;*/undomodify BSR RI_NEG
  2125.  
  2126. L03F18    CMPI.L    #$081E7736,0(A6,A1.L) ;*/modify CMPI.L #$081B5F60,0(A6,A1.L) about 1E8
  2127.                 ; new top, about 1E9
  2128.     BLT.S    L03F2C
  2129.     ADDQ.W    #1,D4
  2130.     BSR.S    L03F40
  2131.     JSR    RI_DIV(PC)    ;*/undomodify BSR RI_DIV
  2132.     BRA.S    L03F18
  2133.  
  2134. L03F2C    CMPI.L    #$081B5F5F,0(A6,A1.L) ;*/modify CMPI.L #$08184C4C,0(A6,A1.L) about 1E7
  2135.                 ; new bottom, about 1E8
  2136.     BGE.S    L03F6C
  2137.     SUBQ.W    #1,D4
  2138.     BSR.S    L03F40
  2139.     JSR    RI_MULT(PC)    ;*/undomodify BSR RI_MULT
  2140.     BRA.S    L03F2C
  2141. L03F40    SUBQ.W    #6,A1        ;*/undomend SUBQ.L #6,A1
  2142.     MOVE.L    #$08045000,0(A6,A1.L) ; 10.0
  2143.     CLR.W    4(A6,A1.L)
  2144.     RTS
  2145. L03F50    MOVEQ    #0,D0
  2146.     SWAP    D1
  2147.     MOVE.W    D1,D0
  2148.     DIVU    #10,D0
  2149.     SWAP    D0
  2150.     MOVE.W    D0,D1
  2151.     SWAP    D1
  2152.     DIVU    #10,D1
  2153.     MOVE.W    D1,D0
  2154.     SWAP    D1
  2155.     EXG    D0,D1
  2156.     RTS
  2157.  
  2158. L03F6C    MOVEQ    #$1F,D0
  2159.     SUB.W    0(A6,A1.L),D0
  2160.     MOVE.L    2(A6,A1.L),D1
  2161.     LSR.L    D0,D1
  2162.     ADDQ.W    #6,A1        ;*/undomend ADDQ.L #6,A1
  2163. L03F7A    ADDQ.L    #5,D1
  2164.     BSR.S    L03F50
  2165.     ADDQ.W    #1,D4
  2166.     CMPI.L    #$05F5E100,D1 ;*/modify CMPI.L #$00989680,D1
  2167.                  ; long int scaling limit, 1E8
  2168.     BGE.S    L03F7A
  2169.  
  2170.     LEA    2(A0,D5.L),A0    ;*/modify ADDQ.W #8,A0
  2171.                 ;*/modify MOVEQ #6,D2
  2172.     MOVE.L    A0,D2        ;*/insertcode
  2173.     MOVE.L    D5,D3        ;*/insertcode
  2174.  
  2175. L03F8C    BSR.S    L03F50
  2176.     ADDI.B    #$30,D0
  2177.     SUBQ.W    #1,A0
  2178.     MOVE.B    D0,0(A6,A0.L)
  2179.     DBF    D5,L03F8C    ;*/modify DBF D2,L03F8C
  2180.  
  2181.     CMP.W    D3,D4        ;*/modify CMPI.W #5,D4
  2182.     BGT.S    L03FAC
  2183.  
  2184.     CMPI.W    #$FFFF,D4
  2185.     BLT.S    L03FAC
  2186.  
  2187.     MOVEQ    #0,D5
  2188.     BRA.S    L03FB0
  2189.  
  2190. L03FAC    MOVE.L    D4,D5
  2191.     MOVEQ    #0,D4
  2192. L03FB0    ADDQ.W    #1,D4
  2193.                 ;*/removecode MOVE.L A0,D2
  2194.     BRA.S    L03FBE
  2195.  
  2196. L03FB6    MOVE.B    0(A6,A0.L),-1(A6,A0.L)
  2197.     ADDQ.W    #1,A0
  2198. L03FBE    DBF    D4,L03FB6
  2199.  
  2200.     MOVE.B    #'.',-1(A6,A0.L)    ; Decimal point
  2201.  
  2202.     MOVEA.L    D2,A0
  2203.                 ;*/removecode ADDQ.W #7,A0
  2204. ;*/endoverlay
  2205. ; --------------------------------------------------------------
  2206. L03FCC    SUBQ.W    #1,A0        ;*/undomend SUBQ.L #1,A0
  2207.     CMPI.B    #'0',0(A6,A0.L)    ; 0
  2208.     BEQ.S    L03FCC
  2209.     CMPI.B    #'.',0(A6,A0.L)    ; .
  2210.     BEQ.S    L03FE0
  2211.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2212. L03FE0    TST.W    D5
  2213.     BEQ.S    L03FF6
  2214.     MOVE.B    #'E',0(A6,A0.L)    ; exponent E
  2215.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2216.     SUBQ.W    #2,A1        ;*/undomend SUBQ.L #2,A1
  2217.     MOVE.W    D5,0(A6,A1.L)
  2218.     JSR    CN_ITOD(PC)    ;*/undomodify BSR CN_ITOD
  2219. L03FF6    MOVE.L    A0,D1
  2220.     SUB.L    (A7)+,D1
  2221.     MOVEM.L    (A7)+,D2-D5
  2222.     RTS
  2223. L04000    MOVE.B    #'0',0(A6,A0.L)    ; 0
  2224.     ADDQ.W    #1,A0        ;*/undomend ADDQ.L #1,A0
  2225.     ADDQ.W    #6,A1        ;*/undomend ADDQ.L #6,A1
  2226.     BRA.S    L03FF6
  2227. L0400C    MOVEM.L    D0/D5,-(A7)
  2228.     CMPI.W    #10,D0
  2229.     BGE.S    L04034
  2230. L04016    SUBQ.W    #1,D5
  2231.     BLE.S    L04024
  2232.     MOVE.B    #'0',0(A6,A1.L)    ; 0
  2233.     ADDQ.L    #1,A1
  2234.     BRA.S    L04016
  2235. L04024    ADDI.W    #'0',D0        ; calculate ASCII digit from
  2236.                 ; number
  2237.     MOVE.B    D0,0(A6,A1.L)
  2238.     ADDQ.L    #1,A1
  2239.     MOVEM.L    (A7)+,D0/D5
  2240.     RTS
  2241. L04034    ANDI.L    #$0000FFFF,D0
  2242.     DIVU    #10,D0
  2243.     SUBQ.W    #1,D5
  2244.     BSR.S    L0400C
  2245.     SWAP    D0
  2246.     BRA.S    L04024
  2247. L04046    BSR.S    L0400C
  2248.     MOVE.B    #' ',0(A6,A1.L)
  2249.     ADDQ.L    #1,A1
  2250.     RTS
  2251. L04052    BSR.S    L0400C
  2252.     MOVE.B    #':',0(A6,A1.L)
  2253.     ADDQ.L    #1,A1
  2254.     RTS
  2255.  
  2256. ; --------------------------------------------------------------
  2257. ;*/beginoverlay
  2258.  
  2259. CN_DATE:
  2260.     MOVEM.L    D1-D5/A2,-(A7)
  2261.     BSR    L040F6
  2262.     SUBA.L    #$16,A1
  2263.     MOVE.W    #$14,0(A6,A1.L)
  2264.     ADDQ.L    #2,A1
  2265.     MOVE.W    D2,D0
  2266.     MOVEQ    #4,D5
  2267.     BSR.S    L04046
  2268.     MULU    #3,D4
  2269.     moveq    #$3A,d5        ;*/mend MOVEA.L  $2814A,A2
  2270.     bsr    MSG_FIX        ;*/mend MOVE.W   #$3A(A2),D0
  2271.                 ;*/mend LEA      0(A2,D0.W),A2
  2272.     ADDA.W    D4,A2        ;*/undomend ADDA.L D4,A2
  2273.     BSR.S    L040E8
  2274.     MOVE.B    #$20,0(A6,A1.L)
  2275.     ADDQ.L    #1,A1
  2276.     MOVEQ    #2,D5
  2277.     MOVE.W    D1,D0
  2278.     BSR.S    L04046
  2279.     SWAP    D2
  2280.     MOVE.W    D2,D0
  2281.     BSR.S    L04052
  2282.     MOVE.W    D3,D0
  2283.     BSR.S    L04052
  2284.     SWAP    D3
  2285.     MOVE.W    D3,D0
  2286.     BSR    L0400C
  2287.     SUBA.L    #$16,A1
  2288. L040B6    MOVEM.L    (A7)+,D1-D5/A2
  2289.     MOVEQ    #0,D0
  2290.     RTS
  2291. CN_DAY:
  2292.     MOVEM.L    D1-D5/A2,-(A7)
  2293.     BSR.S    L040F6
  2294.     SUBQ.L    #6,A1
  2295.     MOVE.W    #3,0(A6,A1.L)
  2296.     ADDQ.L    #2,A1
  2297.     MULU    #3,D0
  2298.     moveq    #$38,d5        ;*/mend MOVEA.L  $2814A,A2
  2299.     bsr    MSG_FIX        ;*/mend MOVE.W   #$38(A2),D0
  2300.                 ;*/mend LEA      0(A2,D0.W),A2
  2301.     ADDA.W    D0,A2        ;*/undomodify ADDA.L D0,A2
  2302.     BSR.S    L040E8
  2303.     SUBQ.L    #5,A1
  2304.     BRA.S    L040B6
  2305. ;*/beginfilling
  2306. NOP040E8:
  2307.     DCB.w    ($40E4-(NOP040E8-ORGN))/2,$4E71
  2308. ;*/endfilling
  2309. ;*/note routines moved -4 bytes to make room for RI.EXEC fix (later)
  2310. L040E8    MOVEQ    #2,D0
  2311. L040EA    MOVE.B    (A2)+,0(A6,A1.L)
  2312.     ADDQ.L    #1,A1
  2313.     DBF    D0,L040EA
  2314.     RTS
  2315. L040F6    MOVE.W    #$3C,D2
  2316.     BSR    L0417E
  2317.     MOVE.W    D0,D3
  2318.     SWAP    D3
  2319.     BSR.S    L0417E
  2320.     MOVE.W    D0,D3
  2321.     DIVU    #$18,D1
  2322.     MOVE.L    D1,D2
  2323.     ANDI.L    #$FFFF,D1
  2324.     MOVE.L    D1,D0
  2325.     DIVU    #7,D0
  2326.     SWAP    D0
  2327.     DIVU    #$05B5,D1
  2328.     MOVE.W    D1,D2
  2329.     ASL.W    #2,D2
  2330.     ADDI.W    #$07A9,D2
  2331.     CLR.W    D1
  2332.     SWAP    D1
  2333.     DIVU    #$016D,D1
  2334.     MOVEQ    #0,D4
  2335.     CMPI.W    #4,D1
  2336.     BNE.S    L0413C
  2337.     SUBQ.W    #1,D1
  2338.     MOVE.W    #$016D,D4
  2339. L0413C    ADD.W    D1,D2
  2340.     SWAP    D1
  2341.     ADD.W    D4,D1
  2342.     MOVEQ    #0,D5
  2343.     MOVE.W    D2,D4
  2344.     ANDI.W    #3,D4
  2345.     BNE.S    L0414E
  2346.     MOVEQ    #1,D5
  2347. L0414E    MOVE.W    D5,D4
  2348.     ADDI.W    #$003A,D4
  2349.     CMP.W    D4,D1
  2350.     BLE.S    L0415C
  2351.     ADDQ.W    #2,D1
  2352.     SUB.W    D5,D1
  2353. L0415C    MOVE.W    D1,D5
  2354.     ADDI.W    #$005C,D5
  2355.     MULU    #$0064,D5
  2356.     DIVU    #$0BEF,D5
  2357.     MOVE.W    D5,D4
  2358.     ADDI.W    #$005C,D1
  2359.     MULU    #$0BEF,D5
  2360.     DIVU    #$0064,D5
  2361.     SUB.W    D5,D1
  2362.     SUBQ.W    #3,D4
  2363.     RTS
  2364. L0417E    MOVEQ    #0,D0
  2365.     SWAP    D1
  2366.     MOVE.W    D1,D0
  2367.     DIVU    D2,D0
  2368.     SWAP    D0
  2369.     MOVE.W    D0,D1
  2370.     SWAP    D1
  2371.     DIVU    D2,D1
  2372.     MOVE.W    D1,D0
  2373.     SWAP    D1
  2374.     EXG    D0,D1
  2375.     RTS
  2376. ; --------------------------------------------------------------
  2377. ;*/endoverlay
  2378. ;*/endfile
  2379.